Ben zaten bu sorunun cevabını biraz biliyorum, ama konuyla ilgili daha fazla bilgiye ihtiyacım varmış gibi hissediyorum.
Temel olarak anladığım kadarıyla, genel olarak konuşursak, herhangi bir zamanda sorguladığınız / sıraladığınız tüm alanları içeren tek bir endeksin yararlı olma olasılığı yoktur, ama bu tür bir şey gördüm. Biri "Bir şeyleri bir dizine koyarsak, veritabanının ihtiyaç duyduğu şeyi bulmak için kullanabilir" diye düşündü, çalışmakta olan bazı sorguların yürütülmesi için bir plan görmedim.
Böyle bir tablo düşünün:
id int pk/uid
name varchar(50)
customerId int (foreign key)
dateCreated datetime
Ben de dahil olmak üzere tek bir endeks görebilirsiniz name
, customerId
ve dateCreated
alanlar.
Fakat benim anladığım kadarıyla, böyle bir endeks, örneğin:
SELECT [id], [name], [customerId], [dateCreated]
FROM Representatives WHERE customerId=1
ORDER BY dateCreated
Böyle bir sorgu için, daha iyi bir fikrin alanı 'ilk' olacak şekilde customerId
ve dateCreated
alanları içeren bir dizin olacağı anlaşılıyor customerId
. Bu, verileri, bu sorgunun ihtiyaç duyduğu sırada hızlı bir şekilde bulabileceği şekilde organize edecek bir dizin oluşturacaktır.
Gördüğüm bir diğer şey, belki de ilk sıklıkta, her alandaki bireysel dizinler; böylece, tek her biri üzerinde name
, customerId
ve dateCreated
alanlar.
İlk örnekten farklı olarak, bu tür bir düzenleme bana bazen en azından kısmen faydalı görünüyor; sorgunun yürütme planı en azından customerId
kayıtları seçmek için dizini kullanıyor olabilir , ancak dizini bu dateCreated
alanları sıralamak için kullanmıyor .
Bunun geniş bir soru olduğunu biliyorum, çünkü belirli bir tablo grubundaki herhangi bir sorgunun özel cevabı genellikle yürütme planının ne yapacağını görmek ve aksi takdirde tablonun / tabloların özelliklerini sorgular ve sorguları içine almaktır. hesap. Ayrıca, bir sorgunun, bunun için belirli bir dizini sağlamanın ek yükünün aksine ne kadar sıklıkla çalıştırılabileceğine bağlı olduğunu da biliyorum.
Fakat sanırım istediğim endeksler için genel bir “başlangıç noktası”, spesifik, sık sorulan sorular ve WHERE veya ORDER BY deyimlerindeki alanlar için özel endekslere sahip olma fikri mi?