Created
April 18, 2011 14:09
-
-
Save 544/925420 to your computer and use it in GitHub Desktop.
オラクルの基本的なヒント句
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/**---- 最適化目標 ----**/ | |
-- 全体最適 | |
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