まず、SQL Server のインデックスは、そのインデックス エントリに最大 900 バイトしか含めることができません。それだけでは、すべての列でインデックスを作成することはできません。
何よりも、そのようなインデックスはまったく意味がありません。何を達成しようとしていますか??
これを考慮してください: にインデックスがある場合(LastName, FirstName, Street, City)
、そのインデックスを使用してクエリを高速化することはできません
そのインデックスは、次の検索に役立ちます
(LastName)
、 また
(LastName, FirstName)
、 また
(LastName, FirstName, Street)
、 また
(LastName, FirstName, Street, City)
しかし、実際には他には何もありません - 確かに justStreet
または just City
!を検索する場合はそうではありません。
インデックス内の列の順序によってかなりの違いが生じます。クエリ オプティマイザーは、インデックスの途中にある列だけをルックアップに使用することはできません。
電話帳を考えてみてください。おそらく、LastName、FirstName、Street の順です。では、その索引付けは、あなたの街のすべての「Joe's」を見つけるのに役立ちますか? 「メインストリート」に住むすべての人?? いいえ - 最初に LastName で検索できます - 次に、そのデータセット内でより具体的に取得します。すべてに索引を付けるだけでは、すべての列の検索を高速化するのにはまったく役立ちません。
検索できるようにしたい場合はStreet
、別のインデックスを追加する必要があります(Street)
(そして、意味のあるもう1つまたは2つの列)。
または他のもので検索できるようにしたい場合はOccupation
、そのために別の特定のインデックスが必要です。
列がインデックスに存在するからといって、その列のすべての検索が高速化されるわけではありません!
主なルールは、できるだけ少ないインデックスを使用することです。インデックスが多すぎると、インデックスがまったくない場合よりもシステムにとってさらに悪いことがあります.... システムを構築し、そのパフォーマンスを監視し、最もコストのかかるクエリを見つけます。インデックスを追加するなどして、これらを最適化します。
できるという理由だけですべての列にやみくもにインデックスを付けないでください-これはシステムパフォーマンスの低下を保証するものです-インデックスにはメンテナンスと維持も必要です.これらすべてのインデックスを更新する必要があるためです。