質問

SQL Server はテーブル列のカーディナリティが低いかどうかをどのように判断するのでしょうか?

私が尋ねる理由は、クエリ オプティマイザーが性別列 (値 'm' と 'f') のインデックスを使用しない可能性が高いためです。しかし、性別列の基数をどのように決定してその決定を下すのでしょうか?

これに加えて、万が一、テーブルに 100 万個のエントリがあり、性別列のエントリが 1 つだけ「m」だった場合、SQL Server はこれを判断し、インデックスを使用してその 1 行を取得できますか?それとも、列内に異なる値が 2 つしかないことを認識し、インデックスを使用しないのでしょうか?

上記でいくつかの不適切な DB 設計について説明していることは理解していますが、私はクエリ オプティマイザーがどのように決定を下すかを理解しようとしているだけです。

どうもありがとう。

役に立ちましたか?

解決

見る Microsoft SQL Server 2005 のクエリ オプティマイザで使用される統計 .

1 つの値「m」と 999999 の「f」を使用すると、統計では、「m」については 1 のカーディナリティ推定値が得られ、「f」については 1M に近い値が得られます。しかし、インデックスが使用されるかどうかには、さらに多くの要因があります。

一般に、このような選択性の低い列は、インデックスだけでは意味がありません。ただし、より複雑なインデックスの左端の列として、またクラスター化インデックスの左端の列としても意味があります。また、列が 'm' には意味を持ち、'f' には意味がない場合でも、クエリの自動パラメータ化が騙されて、 変数 代わりに @gender を使用します。

もっと読むか、さらに詳細を入力する必要があります。優れたリソースとしては、QO チームとチーム メンバーのブログがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top