Oracle SQLチューニングの基本は実行計画を理解することです。実行計画はツリー構造で、様々なオペレーションから構成されます。
この記事では、INDEX UNIQUE SCANオペレーションについて説明します。
INDEX UNIQUE SCANオペレーションとはどのようなオペレーションか?
主キー制約または一意制約を設定した列の値を等価条件に指定したSQLで、索引アクセスしたことを示すオペレーションです。
主キー制約または一意制約を設定した列を等価条件で検索して、検索にマッチする場合、得られる行の数は常に1行です。したがって、INDEX UNIQUE SCANオペレーションにより返される行数は常に1行です。
実行計画の例と処理イメージ図
- Id=2 INDEX UNIQUE SCAN : 索引を一意検索して、検索条件に合致した行のROW IDを得ます。検索条件に合致する行がある場合、行数は常に1です。
- Id=1 TABLE ACCESS BY INDEX ROWID : 索引スキャンの結果得た行のROW IDを元に、行が格納されているブロックにアクセスして、行データを得ます。
INDEX UNIQUE SCANオペレーションに関するFAQ
INDEX UNIQUE SCANオペレーションを使う実行計画は望ましくないですか?
いいえ。一般的に問題となるものではありません。
INDEX UNIQUE SCANオペレーションを使う実行計画に誘導するヒントは何ですか?
INDEX UNIQUE SCANオペレーションを使う実行計画に誘導するヒントはありません。INDEX UNIQUE SCANオペレーションは主キー制約または一意制約を設定した列の値を検索条件に指定したSQLの実行計画で使用されるオペレーションです。INDEX UNIQUE SCANオペレーションが使用されるかどうかは、SQLの検索条件と制約の構成から自然と決まってくるので、人為的にヒントで誘導する状況は原則的にありません。
なお、INDEX UNIQUE SCANオペレーションに限定せず、索引アクセス一般に誘導するヒントにはINDEXがあります。
INDEX UNIQUE SCANオペレーションの実行時、ブロックは1ブロックずつよみだされますか?
はい。索引のブロックは1ブロックずつよみだされます。ただし、対象となる索引のブロックがすでにメモリにキャッシュされている場合は、物理I/Oは発生しません。
主キー制約または一意制約を設定していない列に設定した索引にアクセスした場合のオペレーションは何ですか?
通常、INDEX RANGE SCANオペレーションが使用されます。
主キー制約または一意制約を設定した列を非等価条件で検索した場合のオペレーションは何ですか?
通常、INDEX RANGE SCANオペレーションが使用されます。
参考情報
キーワード
索引アクセス INDEX UNIQUE SCAN INDEX RANGE SCAN