インデックスで指定する項目の順番

ここでは、インデックスで指定する項目の順番について紹介します。

次のSQLのように、where句の抽出項目が3つあるSQLでインデックスを検討するとき、インデックスの項目の順番は重要です。インデックスに指定した項目の順に検索をしていくので、より速く効率的に検索できるような順番にします。

一般的には、対象となるカラムのカーディナリティが高い順に指定します。カーディナリティとは、カラム内のデータの一意な数です。カラム内に一意なデータが多いほど、インデックス検索でより速く欲しいデータを探索できます。

カラム内のカーディナリティを知るには、DBA_TAB_COL_STATISTICSというビューのNUM_DISTINCTというカラムの値がそのまま使えます。NUM_DISTINCTには、そのカラムの”列内で異なる値の数”、つまり一意な値の数が格納されています。

つまり、対象のカラムのNUM_DISTINCTの高い順に並び替えると、一般的に効率的なインデックスの順になります。最終的には、インデックスを作成してみて、SQLを実行してみて、性能が改善することを確認してから決めることをオススメします。

◆SQLの例

select
  a.*
from
  table1 a
where
  a.col1 = ‘1’
  and a.col2 = ‘2’
  and a.col3 = ‘3’
;

◆カーディナリティを調査するSQL

select
  a.column_name
  ,a.num_distinct
from
  DBA_TAB_COL_STATISTICS a
where
  a.owner = ‘oracle’
  and a.table_name = ‘table1’
  and a.COLUMN_NAME in (‘col1′,’col2′,’col3’)
;

インデックスで指定する項目の順番” に対して1件のコメントがあります。

この投稿はコメントできません。