パフォーマンス改善の基本となるINDEXの作成の際、どの列にINDEXをつけるべきかを判断するためのSQLの紹介。
INDEXは、ただ検索条件や結合条件の列に対してつければ良いというものではない。
列の値の種類が多い(カーディナリティが高い)ところに作成し、効率よくデータを絞り込めるようにするのが基本。
複合INDEXの場合は、カーディナリティが高い順番に列を記載する。
Tableに作成されているIndexと格納されている表領域名の確認
col INDEX_NAME for a50
SELECT INDEX_NAME, TABLESPACE_NAME
FROM DBA_INDEXES
WHERE TABLE = 'テーブル名';
Tableの各列のカーディナリティの確認
set pasesize 1000
col COLUMN_NAME for a50
SELECT COLUMN_NAME, NUM_DISTINCT
FROM DBA_TAB_COLUMNS
WHERE TABLE_NAME = 'テーブル名'
ORDER BY COLUMN_NAME;
Indexがどの列に対して作成されているかの確認
col INDEX_NAME for a50
col COLUMN_NAME for a50
SELECT INDEX_NAME, COLUMN_POSITION, COLUMN_NAME
FROM DBA_IND_COLUMNS
WHERE TABLE _NAME= 'テーブル名' --ここはINDEX_NAME='インデックス名'でもよい
ORDER BY INDEX_NAME, COLUMN_POSITION, COLUMN_NAME;
※COLUMN_POSITION:INDEXに含まれる列の記載順序
複合INDEXの場合、どの順序になっているかが重要