by Hayato Matsuura.

アクセス述語とフィルタ述語の見分け方


DB2よりも述語情報の評価モードについて詳しい情報を提供するデータベースはありません。とは言え、単に実行計画において 述語情報がIXSCAN、 または稀ですがフィルタ述語の、開始と終了の両方あるいは片方の条件に 使われるかどうかを表示するだけです。さらに、sargと言う 単語の古い意味を使っているので混乱しやすいものになっています。

昔、IBMの研究者はこの種類の検索条件を「sargableな述語」と呼んだが、それはSARGがSearch ARGumentの略語だったからだ。その後、MicrosoftとSybaseが「sargable」に対して、 「インデックスを使って検索できる」という意味を再定義したのだった。

SQL Performance Tuning(訳は訳者による)

筆者にはどちらの定義もあまり役に立たないように思えたので、この単語は本文中では使わないようにしています。しかし、DB2の実行計画の フィルタ述語にはSARGと言うラベルがつきます。この場合、IBM DB2は上に書いた中でも「オリジナルの」意味で使っているという事に 注意してください。これは、ドキュメントの記述により裏付けられます。

  • 索引検索引数述部(Index sargable)は、 検索の範囲を限定するためには使用されず、選択された場合に索引から評価されます。 これは、この述部に関係する列が索引キーの一部であるためです。 これらの述部も、索引マネージャーによって評価されます。

  • データ検索引数述部(Data sargable)は、 索引マネージャーでは評価できない述部ですが、データ管理サービス(DMS) によって評価できます。通常、これらの述部には、 基本表の個々の行へのアクセスが必要となります。必要に応じてDMS は、述部を評価するために必要な列を取り出し、さらに SELECTリストの列を満たすもののうち索引からは取得できなかったものを取り出します。

「照会の述部の処理」 DB2 LUW 11.1ドキュメント

つまり、DB2においてSARGとラベルされているのは、 通常、インデックスレベルかテーブルレベルかによらず、フィルタ述語であるという事です。

DB2の実行計画に表示されている述語情報の非常に良い所は、アクセス述語のラベルを付けるだけでなく、 どの述語がSTARTSTOPに使われているのかまで 明示的に表示される事です。

次の例は、last_explainedビューで 表示される全ての述語タイプを示したものです。

Explain Plan
--------------------------------------------------------------
ID | Operation           |                        Rows |  Cost
 1 | RETURN              |                             | 23550
 2 |  GRPBY (COMPLETE)   |        1 of 96480 (   .00%) | 23550
 3 |   IXSCAN SCALE_SLOW | 96480 of 60299800 (   .16%) | 23544

Predicate Information
 3 - START (Q1.SECTION = ?)
      STOP (Q1.SECTION = ?)
      SARG (Q1.ID2 = ?)

Explain plan by Markus Winand - NO WARRANTY
http://use-the-index-luke.com/s/last_explained

この出力からだと、スキャンされるインデックスの範囲が非常に 簡単に分かります。STARTSTOP述語を 見れば良いだけです(この例だと同じになっています)。 3番目のID2列に対する述語はSARGとラベルされており、 単なるフィルタ述語になっています。

SARG述語は他の処理(例、TBSCAN)にも 現れますが、STARTSTOPの表示があるのは IXSCANだけです。STARTSTOPが 無い事はつまり、上限あるいは下限が決まっているだけの検索だと言う事です(例、WHERE x > ?)。IXSCANSTARTSTOPのどちらもない場合、 インデックス全体が読まれている事になります。

著者について

Markus Winandの写真

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

彼の本

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

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

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

Amazonで購入
(印刷版のみ)

Do not use offset for pagination

Learn why

Visit my sibling!A lot changed since SQL-92!

Use The Index, Luke のカップは

ステッカー、コースター、本、コーヒーマグ。 学習に必要なものすべて。

今すぐ購入

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR | CC-BY-NC-ND 3.0 license