やりたいこと
Db2環境で発行するSQLにてテーブルに作成してあるインデックスの利用有無を確認する。
環境情報
- DB2 v11.5
- RHEL 7
やり方
db2explnコマンドを利用する。
接続情報及びqオプションにて発行したいSQLを記載した結果にて
$ db2expln -d sample -u DB2INST1 P@ssword -t -g -q "select * from sales where SALES = 15"
以下のようにIndexが含まれているかどうかを確認する。
Optimizer Plan:
Rows
Operator
(ID)
Cost
12.6715
RETURN
( 1)
36.2754
|
12.6715
FETCH
(--)
36.2754
/ \
12.6715 129495
RIDSCN Table:
( 3) DB2INST1
6.81808 SALES
|
12.6715
SORT
( 4)
6.81794
|
12.6715
IXSCAN
( 5)
6.8174
|
10001
Index:
DB2INST1以下、補足です。
補足
設定したインデックスがどのように利用されているのかを確認する手法にアクセスプランの確認があります。この確認にはdb2exfmtが一般的ですが、ワンライナーで利用できるdb2explnを今回は利用しました。
尚、SQLによってはインデックスは利用されないパターンもあり、例えば以下のように条件を変えると
$ db2expln -d sample -u DB2INST1 P@ssword -t -g -q "select * from sales where SALES > 15"
...
Optimizer Plan:
Rows
Operator
(ID)
Cost
127140
RETURN
( 1)
618.247
|
127140
TBSCAN
( 2)
618.247
|
129495
Table:
DB2INST1
SALES表全体を検索するプランが最適と判断され、インデックスは利用されませんでした。
以上。