1

SQLServerpediaのインデックスキーの選択の記事で、次の行を見つけました。

テーブル内のデータはクラスター化インデックスの構造に従って順序付けられるため、last_name、first_nameに基づいて作成されたインデックスは、first_name、last_nameに基づいて作成されたものと同じように動作しません。最も選択的な列を最初に指定する必要があります。

なんで?a、bのインデックスがb、aのインデックスと異なる必要があるのはなぜですか?組み合わせの一意性はどちらの方法でも同じですが、なぜ最初に発生するものを指定する必要があるのでしょうか。

4

1 に答える 1

4

一意性は同じですが、記事では動作について言及しています。電話帳を考えてみてください。John Smith を探している場合は、最初に姓 = Smith を検索し、次に名 = John に絞り込む方がはるかに簡単です。他の方法で試してみてください...すべてのジョンを見つけて、どれがスミスかを見つけますか?

そのため、一般的に姓で人を検索する場合は、索引を姓の次に名の順に並べることが理にかなっています。このようにして、同じ姓はすべて同じ一連のインデックス ページに表示されます。

これは明らかに、ユニーク インデックスと非ユニーク インデックスの両方に当てはまります。インデックス キー列の一意性は、順序に関係なく適用されます。また、必ずしもすべての列をキーの一部にする必要はないことに注意してください。列を含めるだけでよい場合もあります。

また、この特定のケースでは、インデックスを一意にする必要はないと思います。2 人のジョン スミスがニュースレターにサインアップしたり、会社で働いたり、戦いに参加したりするのを防ぐことができる可能性は低いからです。 club - last/first は適切なキーではありません。

于 2012-07-02T18:44:10.617 に答える