by Hayato Matsuura

Db2 (LUW)における実行計画の処理


Db2 (LUW)の実行計画の処理でも最も一般的なものについての、簡単なリファレンスです。全てのリストはIBMの ドキュメントを参照してください。

インデックスとテーブルへのアクセス

IXSCAN

IXSCANは、Bツリーの走査に 加えて、一致するエントリを探すのにリーフノードチェーンをたどります。第1章1, 「 SQLインデックスの内部構造も参照して下さい。.

いわゆるインデックスフィルタ述語("SARG"述語)は、 IXSCANの際にパフォーマンス問題を引き起こします。次の節で、 その問題の識別方法を説明しています。OracleでいうINDEX ... SCANと 同じ種類の処理です。

STARTSTOPがなければ、 フルインデックススキャンが行われている事にになります。

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句に従って、結果をソートします。この処理は、中間結果(パイプライン化されていないもの)を マテリアライズするために、非常に多くのメモリを必要とします。また、MSJOINGRPBYと言った 処理のためにデータを必要な順序に並べ替える場合にも使われます。さらにSORTは、distinctがある時に重複した行を削除するのにも使われます。 インデックスを使ったorder byも参照して下さい。

last_explainedビューでは、 一意なソートが行われているか括弧内に表示します(例、SORT (UNIQUE))。最初のN件のみのソートは、 TOP-Nのラベルが付きます(例、because of fetch 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件のみを選択する仕組みがはたらいていると分かるでしょう。

前へ次へ

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Bluesky or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

著者について

Markus Winandの写真

Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazon.co.jpで購入
(印刷版のみ)

Connect with Markus Winand

Markus Winand MailinglistsSubscribe RSS feedMarkus Winand on LinkedInMarkus Winand on XINGMarkus Winand on TwitterMarkus Winand on Bluesky
Copyright 2015-2025 Hayato Matsuura, Markus Winand. All righs reserved.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR