
Oracle SQLチューニング講座(9) Page 1/4
索引の使い分けでパフォーマンスを向上できるケース
株式会社アゲハ
倉田 寛正
2005/2/19
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
| 主な内容 --Page 1--
--Page 2--
--Page 3--
--Page 4--
|
前回「複合索引(コンポジット索引)が有効なケース」は、コンポジット索引を有効利用するためのチューニング・テクニックを説明しました。Oracleにはいままでに紹介した以外にも、さまざまな状況に応じて使用できる索引が用意されています。今回はそれらの索引の使用場面や特徴について説明します。
Oracle8iから利用できるファンクション・ベース索引では、関数や式の値が事前に計算され、その結果が索引内に格納されています。そのため、WHERE句で指定した索引列が関数や算術で修飾されて索引を使用できないケースにおいても、このファンクション・ベース索引を利用することで索引スキャンが可能になります(詳しくは、第7回「索引を使用できないケース」を参照)。
ファンクション・ベース索引を使用するためには、以下の設定を行うか、SQL中に明示的にHINT句を指定する必要があります。
- 初期化パラメータ「QUERY_REWRITE_ENABLED=TRUE」、初期化パラメータ「QUERY_REWRITE_INTEGRITY=ENFORCED」 注1
- 初期化パラメータ「COMPATIBLE」が8.1以上
- 索引が作成された表の統計情報が取得され、コストベースのアプローチを使用する
| 注1:初期化パラメータ SQL関数を使用したファンクション・ベース索引の場合には、デフォルト値(ENFORCED)でも使用できます。しかし、ユーザー定義関数を使用したファンクション・ベース索引の場合には、「QUERY_REWRITE_INTEGRITY=TRUSTED」と設定した場合のみ使用できます。 |
図1は、ファンクション・ベース索引の作成例、および作成後の確認方法となります。
![]() |
| 図1 ファンクション・ベース索引の作成、確認方法 |
それでは、実際にWHERE句の索引列が関数によって修飾されているSQLで、ファンクション・ベース索引を使用した場合とそうでない場合での実行統計、実行計画を比較してみましょう。
![]() |
| 図2 通常のB*Tree索引は使用されずに全表スキャンされた場合 |
![]() |
| 図3 ファンクション・ベース索引を使用した場合 |
図3では、ヒント文でファンクション・ベース索引を使用するようにオプティマイザに指示しています。実行計画から、WHERE句の条件列が算術によって修飾されているにもかかわらず、ファンクション・ベース索引による索引スキャンが実施されていることが確認できます。また、実行時間、アクセスブロック数も大きく減少していることが分かります。冒頭でも記述したように、関数などによる負荷の高い計算処理結果がすでに索引に格納されているため、検索処理のパフォーマンスを大きく改善できる可能性があります。(次ページへ続く)
| 1/4 |
| Index | |
| 連載 Oracle SQLチューニング講座(9) 索引の使い分けでパフォーマンスを向上できるケース |
|
| Page 1 ・ファンクション・ベース索引の使用 |
|
| Page
2 ・ビットマップ索引の使用 |
|
| Page
3 ・逆キー索引の使用 |
|
| Page
4 ・ITLの競合を回避する ・索引作成時のDESCオプションについて |
|
| 連載 Oracle SQLチューニング講座 |
TechTargetジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



