(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Db2】特定のSQLに対してインデックスの利用有無を確認する

スポンサーリンク

やりたいこと

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

表全体を検索するプランが最適と判断され、インデックスは利用されませんでした。

以上。