web-dev-qa-db-ja.com

カーディナリティの見積もりが違いを生むクエリ実行プランの例

クエリ実行プランの例を作成しようとしています。これは、テーブルのいくつかの列のカーディナリティの見積もりがある場合、どのクエリ実行プランが最もコストが低いかを判断できることを示しています。

したがって、これらの2つの投稿( 1 および 2 )があります。これらは、列の個別の値の数として推定カーディナリティを理解できます。次に、選択性を計算します。

SELECT max(price) FROM tickets WHERE country = "CANADA";

テーブルに180項目あり、10のみがカナダの場合。そして、4か国しかありません(カナダ、ブラジル、アメリカ、ドイツ)。そう....

列国é4のcardinalityは、個別のアイテムの数であるためです。

列=(カナダ)のselectivityは、アクセスされたアイテムの数をテーブルのアイテムで割ったものです。 10/180 = 0.0555。

しかし、オプティマイザがカーディナリティに基づいて選択できる異なるクエリ実行プランはどれですか?

これが良い例ではない場合、誰かが1つのクエリを指摘して、カーディナリティがオプティマイザにとって宝であるということを考えて、あるプランを別のプランを選択することを決定しますか?

おかげで、フェリペ

2
Felipe

180行では、違いはほとんど見られません。

さまざまな述語分布でさまざまなプランが選択されることを確認するには、かなり多くのデータが必要であり、それらを支援するために競合するデータソース(インデックス)が必要になる可能性があります。

テーブルに1.8mmの行があるとしましょう。あなたが持っているなら

  • 価格や国に関係のない列のクラスター化インデックス(IDなど)
  • 価格と国に関する非クラスター化インデックス
  • 国の単一列の非クラスター化インデックス

検索する国とその選択性によっては、集計方法、選択したシリアルプランとパラレルプラン、インデックスの選択方法に違いが見られる場合があります。

最近のQ&Aの例:

より複雑な理由により:

5
Erik Darling

だから、これはあなたが探しているものではありませんが、役立つかもしれません。先週尋ねた別の質問に対する回答を提供しました。

非常に類似したクエリ、大幅に異なるパフォーマンス

この質問では、IN()ステートメントに単一の値を追加することで、クエリプランと実行時間が変更されました。別の人から提供されたその質問に対する素晴らしい答えがあるので、うまくいけば、あなたが探している詳細がわかるでしょう。

3
Kirk Saunders