Aşağıdaki sorgu, LastModifiedTime sütunundaki bir dizinde dizin araması kullanır.Dizin Aracılığıyla Kümelenmiş Dizin Taraması - Neden tarama seçildi?
SELECT
CONVERT(varchar, a.ReadTime, 101) as ReadDate,
a.SubID,
a.PlantID,
a.Unit as UnitID,
a.SubAssembly
FROM dbo.Accepts a WITH (NOLOCK)
WHERE a.LastModifiedTime BETWEEN '3/3/2010' And '3/4/2010'
AND a.SubAssembly = '400'
Yukarıdaki sorgu ile hemen hemen aynıdır, aşağıdaki sorgu yerine, LastModifiedTime endeksin, kümelenmiş bir dizin tarama kullanır. Birisi bana nedenini söyleyebilir mi? Ve daha da önemlisi, bir dizin ipucu kullanarak olmadan LastModifiedTime sütunu, dizinini kullanmak için SQL Server almak için ne yapabilirim.
Declare @LastModifiedTimeEnd dateTime
Declare @LastModifiedTimeStart dateTime
SELECT
CONVERT(varchar, a.ReadTime, 101) as ReadDate,
a.SubID,
a.PlantID,
a.Unit as UnitID,
a.SubAssembly
FROM dbo.Accepts a WITH (NOLOCK)
WHERE a.LastModifiedTime BETWEEN @LastModifiedTimeStart And @LastModifiedTimeEnd
AND a.SubAssembly = '400'
Sorgu planlayıcısının kümelenmiş dizinin neden daha iyi olduğunu varsayması konusunda kafam karıştı. Parametrelerin ne olduğuna bakılmaksızın, bunun için oluşturulmuş bir endekse sahip olan belirli bir sütuna karşı hala uyuşmaktadır. Yalnızca sabit parametrelerle kullanıldığında bu endeksin noktası nedir? –
@Kent: Bir dizi değeri almak için ikincil bir dizin kullanmak, endeksi tabloya geri eklemeyi gerektirir. Aralık büyük olduğunda, birleştirme yükü sıralama ek yükünden daha ağır basar. – Quassnoi
Anladım - teşekkürler. Tahmin edersem, parametre koklamasının varsayılan davranış olacağını varsaydım. Muhtemelen '> = @LastModifiedTimeStart VE <= LastModifiedTimeEnd' kullanılarak," OPTION (RECOMPILE) "belirtilmeksizin kümelenmemiş dizinin kullanılmasını da engeller. –