トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

OracleのデフォルトバッファにIndexを載せる!

Last-modified: 2013-08-24 (土) 02:14:21 (2216d)
Top / OracleのデフォルトバッファにIndexを載せる!

OracleのデフォルトバッファにIndexを載せる!

OracleのデフォルトバッファにIndexを載せる方法は以下の通り。

考え方としては、

  • Oracleは検索をかけると、その内容をデフォルトバッファ(メモリ)に展開する
    (メモリが足りない場合は一時表領域を使う)

という性質を利用し、メモリに載せたいIndexを使った検索を実行してやります。

明示的に索引を指定して検索を実行する

たとえば、以下のようなSQLを実行します。

SELECT /*+ NOPARALLEL_INDEX(T XPK_TEST_TABLE) INDEX_FFS(T XPK_TEST_TABLE) */ COUNT(NO) FROM TEST_TABLE T;

解説すると、

  • /*+ ~ */の部分
    ヒント句。これを指定することで、明示的に使用するインデックスを指定している。
    • NOPARALLEL_INDEX : パラレル実行されるとindexが使われないため、NO~を指定する。
    • INDEX_FFS : 実行計画で、indexのフルスキャンを強制させる

な感じです。

して、これを実行すると、

  • indexのフルスキャンが実行される
  • ってことは、デフォルトバッファ(メモリ)にindexが全てキャッシュされる

ってわけなんですよ。へー

ちなみに、デフォルトバッファのメモリの動き的には、使われないものはどんどん捨てられて新しいものが入ってくるので、頻繁に検索に使うindexとかテーブルとかは、keepに入れるって寸法になるわけです。

へーなるほど

更新日:2013-08-24 (土) 02:14:21