Skip to content

Instantly share code, notes, and snippets.

@544
Created April 18, 2011 14:09
Show Gist options
  • Save 544/925420 to your computer and use it in GitHub Desktop.
Save 544/925420 to your computer and use it in GitHub Desktop.
オラクルの基本的なヒント句
/**---- 最適化目標 ----**/
-- 全体最適
SELECT /*+ ALL_ROWS */ FROM DUAL;
-- 最初のn行に対して最適化
SELECT /*+ FIRST_ROWS (1) */ FROM DUAL;
/**---- アクセスパス ----**/
-- テーブル全体を走査
SELECT /*+ FULL(A) */ FROM DUAL A;
-- インデックスを利用して走査(PK_Aの部分はインデックス名)
/*********************************************************************
インデックスを利用すべきかどうかの判断基準としては
絞り込み率が全体の1%未満・・・インデックスを利用すべき
絞り込み率が全体の5%未満・・・場合によるので別途検討が必要
絞り込み率が全体の5%以上・・・インデックスを利用すべきでない
また、インデックス利用時はWHERE句の条件にて
インデックスの項目をインデックスの定義順に追加すること。
**********************************************************************/
SELECT /*+ INDEX(A PK_A) */ FROM DUAL A
WHERE A.DUMMY = 'PK_VALUE';
/**---- 結合順序 ----**/
/*********************************************************************
テーブル結合順序は、結合結果の行数ができるだけ少なくなる順にする。
**********************************************************************/
SELECT /*+ LEADING (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;
/**---- 結合操作 ----**/
-- NestedLoop結合
/*********************************************************************
駆動表×結合対象をループ処理で結合していく結合方式
結合対象が、パーティションやインデックスで絞り込める場合に有効
結合結果が順次取得できるので、Webアプリの画面に向く。
**********************************************************************/
SELECT /*+ USE_NL (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;
-- HashJoin結合
/*********************************************************************
駆動表のハッシュテーブルをメモリ上に作成し、
それに対して結合対象のテーブルを紐づけていく結合方式
結合対象が、大量データや表の大部分を占める場合に有効
ただし、あまりに大量すぎると、メモリを逼迫してしまいDB全体に影響を与えてしまう。
結合が全て完了しないと結果が取得できないため、Webアプリの表示等には向かない。
**********************************************************************/
SELECT /*+ USE_HASH (A B) */ FROM DUAL A, DUAL B
WHERE A.DUMMY = B.DUMMY;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment