複合索引(コンポジット索引)が有効なケースOracle SQLチューニング講座(8)(3/3 ページ)

» 2005年01月20日 00時00分 公開
[倉田寛正株式会社アゲハ]
前のページへ 1|2|3       

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

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

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

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

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

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

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

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


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


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。