Db2 (LUW)の実行計画の処理でも最も一般的なものについての、簡単なリファレンスです。全てのリストはIBMの ドキュメントを参照してください。
インデックスとテーブルへのアクセス
- IXSCAN
IXSCAN
は、Bツリーの走査に 加えて、一致するエントリを探すのにリーフノードチェーンをたどります。第1章1, 「 SQLインデックスの内部構造」も参照して下さい。.いわゆるインデックスフィルタ述語("
SARG
"述語)は、IXSCAN
の際にパフォーマンス問題を引き起こします。次の節で、 その問題の識別方法を説明しています。OracleでいうINDEX ... SCAN
と 同じ種類の処理です。START
やSTOP
がなければ、 フルインデックススキャンが行われている事にになります。last_explained
ビューでは、逆順のスキャンを括弧内に表示します(例、IXSCAN (REVERSE)
)。- FETCH
前段のインデックス検索で取得した
RID
を使って、テーブルから行を取り出します。第1章1, 「 SQLインデックスの内部構造」も参照してください。 Oracleで言うTABLE ACCESS BY INDEX ROWID
と 同じ処理です。- TBSCAN
フルテーブルスキャンとして知られる処理です。テーブル全体つまり全行・全列をディスクに保存されている通りに 読みます。複数ブロックの読み出し処理により、フルテーブルスキャンの速度は大幅に改善されはしますが、最も重い処理の1つである事に 変わりありません。IO処理も多いですが、フルテーブルスキャンでは全てのテーブルの行の値をチェックしなければならないので、 かなりのCPU時間も消費します。「フルテーブルスキャン」も参照して下さい。
- RIDSCN
この処理は、インデックスマージの際に使われます。 ソート後にデータページを先読みするのに使われる事の方が多いかもしれません。
結合処理
- NLJOIN
片方のテーブルから結果を取り出し、その結果をもう1つの テーブルの各行に対して問い合わせて、2つのテーブルを結合します。 「入れ子ループ」も参照して下さい。
- HSJOIN
ハッシュ結合では、結合の片方から候補となるレコードをハッシュテーブルにロードし、それを結合のもう片方の各行と 突き合わせます。「ハッシュ結合」も参照して下さい。
- MSJOIN
マージ結合は、並べ替えられた2つのリストをジッパーのように マージします。結合の両辺は事前にソートしておく必要があります。「ソートマージ」も参照して下さい。
- ZZJOIN
スタースキーマを使ったデータウェアハウス向けの、マルチテーブル結合(2つ以上のテーブルの結合)です。
ソートとグルーピング
- SORT
order by
句に従って、結果をソートします。この処理は、中間結果(パイプライン化されていないもの)を マテリアライズするために、非常に多くのメモリを必要とします。また、MSJOIN
やGRPBY
と言った 処理のためにデータを必要な順序に並べ替える場合にも使われます。さらにSORT
は、distinct
がある時に重複した行を削除するのにも使われます。 「インデックスを使ったorder by」も参照して下さい。last_explained
ビューでは、 一意なソートが行われているか括弧内に表示します(例、SORT (UNIQUE)
)。最初のN件のみのソートは、TOP-N
のラベルが付きます(例、because offetch first ... rows only
).- UNIQUE
ソート済みのセットから重複行を排除します。
SORT
処理なしに必要な順序でデータが得られる場合でdistinct
がある時の処理で使われます (例えばIXSCAN
で必要な順序で結果が得られる時)。SORT
処理が行われる時には、SORT
が重複排除を行います。- GRPBY
group by
列の結果をまとめます。 この処理は、ソートやgroup-byアルゴリズム、あるいはハッシュベースアのプローチ(v10.1以降)を使って実行されます。 「インデックスを使ったgroup by」も参照してください。last_explained
ビューでは、 このまとめる処理を括弧内に表示します(例、GRPBY (HASH COMPLETE)
)。
最初のN件のみを選択するクエリ
Db2 (LUW)には、fetch first ... rows
only
の様な 最初のN件のみを選択するクエリに直接対応する実行計画の処理は
ありません。しかし、SORT
処理が行われた場合に、last_explained
ビューでは、
最初のN件のみの最適化が行われている事を括弧内に表示します(例、SORT (TOP-N)
)
SORT
処理が必要ない時には、最初のN件のみを選択するクエリに
ついての表示は特に出ません。しかし、述語情報が無いのにコスト値や行数見積が
急に減っている時は、最初のN件のみを選択する仕組みがはたらいていると分かるでしょう。