検索
連載

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

本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

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

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

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

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

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

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

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

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


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


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る