【SQL】インデックスの項目の順番の正しい付け方

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

インデックスの基礎的な内容は↓で紹介していますので参考にしてください。
>>【ORACLE】索引・インデックスとは

インデックスの項目の順番の正しい付け方

次の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’)
;

最後に

最後までお読みいただきありがとうございます。

SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。