1

SQL Server はテーブル列の基数が低いかどうかをどのように判断しますか?

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

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

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

どうもありがとう。

4

1 に答える 1

2

Microsoft SQL Server 2005 のクエリ オプティマイザーで使用される統計を参照してください。

値 'm' が 1 で 'f' が 999999 の場合、統計ではカーディナリティの推定値が 'm' で 1 になり、'f' で 1M に近い値になります。しかし、インデックスが使用されるかどうかにかかわらず、さらに多くの要因があります。

一般に、このような選択性の低い列は、インデックスだけでは意味がありません。ただし、より複雑なインデックスの左端の列として、またクラスター化インデックスの左端の列としても意味があります。また、列が 'f' ではなく 'm' に対して意味がある場合でも、クエリの自動パラメーター化がトリックを実行し、代わりに変数@gender のプランを生成する可能性があります。

詳細を読むか、詳細を提供する必要があります。いくつかの優れたリソースは、QO チームとチーム メンバーのブログです。

于 2010-04-11T01:26:00.673 に答える