Oracle SQLチューニング講座(8)

複合索引(コンポジット索引)が有効なケース Page 3/3

株式会社アゲハ
倉田 寛正
2005/1/20

索引スキップ・スキャンの使用

 Oracle8iまで、複合索引を利用させるためには、複合索引の先頭列がWHERE句の条件列に含まれている必要がありました。そのため、さまざまな検索パターンが存在する場合には、索引スキャンを行わせるために複数の複合索引を作成することになり、その結果、更新などのパフォーマンスに悪影響を及ぼしてしまうことがありました。

 Oracle9iからは索引スキップ・スキャン機能により、索引内の先頭列がWHERE句の条件列に含まれていなくても、その複合索引を使用することが可能になりました。索引スキップ・スキャン機能を利用することで、表に作成する複合索引の個数を少なくできるため、表に対する更新処理のパフォーマンス劣化を抑えることが可能になります。

 それでは、以下のように「l_shipmode」列が先頭である複合索引を使用して、索引スキップ・スキャンの動作を確認してみましょう。

図9 複合索引の列位置の確認方法

 「INDEX_SS」ヒントを使用して索引スキップ・スキャンをオプティマイザに指示し、WHERE句の条件列には索引の先頭列が含まれていないことに注目して、SQLトレース、TKPROFユーティリティを使用して実行計画を取得します。

図10 索引スキップ・スキャンによる先頭列を含まない複合索引の使用

 図10の実行計画から、複合索引の先頭「l_shipmode」列が含まれていなくても、「idx2_lineitem」索引が索引スキップ・スキャンによって使用されていることが確認できます。

 複合索引の有効利用は、検索性能を向上させるうえで、利用できる機会が多くある非常に重要なテクニックですので、ぜひトライしてみてください。次回は、引き続き索引を使用したチューニング・テクニックを紹介します。(次回に続く)

3/3  

 Index
連載 Oracle SQLチューニング講座(8)
複合索引(コンポジット索引)が有効なケース
  Page 1
・複合索引(コンポジット索引)の使用
  Page 2
・複合索引(コンポジット索引)をさらに有効利用する
 COUNT(*)の高速化
Page 3
・索引スキップ・スキャンの使用


連載 Oracle SQLチューニング講座

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH