Kesin sınırı önceden belirlemek gerçekten zor.
Çoğu insanın hafife aldığı bir şey, bir dizinde sorguda kullanılacak bir aday haline gelmeden önce yerine getirmesi gereken yüksek gereksinimlerdir.
Verimli (kümelenmemiş) bir dizin
mükemmel seçicilik sunar , örneğin toplam satırların yalnızca çok küçük bir yüzdesini (<% 1, <% 2) döndürür. Seçicilik verilmiyorsa - SQL Server'ın sorgu iyileştiricisi büyük olasılıkla bu dizini yok sayar
ideal olarak sorguyu kapsamalı , yani sorgunun gerektirdiği tüm sütunları döndürmelidir. 1 veya 2 dizin sütununa sahip bir dizin oluşturabilir ve eklenen sütunlar olarak başka bir avuç (2-4) sütun ekleyebilir ve böylece bir sorguyu kapatabilirsiniz - o zaman sorgu optimizer'ın bu dizini kullanma olasılığı vardır. Bu ayrıca şu anlama gelir: Kodunuz her zaman tüm sütunlarıSELECT * ..... getirmek için kullanılıyorsa, endekslerin kullanılma olasılığı azalır - oldukça dramatik bir şekilde, aslında
Eminim bir ton başka kriter daha var - ama bu ikisinin en kritik olanlar olduğuna inanıyorum. Tabii ki, endekslerinizi her zaman düzgün bir şekilde muhafaza etmeli (yeniden organize etmeli, yeniden inşa etmeli) ve endekslerinizle ilişkili istatistiklerin güncel olduğundan emin olmalısınız.
Not: yabancı anahtar sütunlarındaki kümelenmemiş endeksler özel bir durumdur; Varsayılan olarak, her zaman bunları eklemeyi öneriyorum, çünkü hem referans bütünlük kontrollerini hem de JOINbu FK kısıtlamalarını hızlandırmaya yardımcı oluyorlar . Ancak burada bile, daha da kullanışlı hale getirmek için bazı ek "dahil" sütunları ekleyerek bu FK sütun indekslerini "genişletmek" kesinlikle geçerlidir.