やりたいこと
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
表全体を検索するプランが最適と判断され、インデックスは利用されませんでした。
以上。