Log ve LogItem tablolarım var; Her ikisinden de bazı verileri almak için bir sorgu yazıyorum. Binlerce var Logs
ve her biri Log
125'e kadar sahip olabilirLogItems
Söz konusu sorgu karmaşıktır, bu yüzden onu atlıyorum (birisi önemli olduğunu söyleyebilirim muhtemelen gönderebilirim), ancak SSMS Tahmini Sorgu planını çalıştırdığımda, yeni bir Kümelenmemiş dizin performansı% 100'e kadar artıracağını söyledi .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Sadece eğlence için, bu yeni dizini oluşturdum ve sorguyu çalıştırdım ve çok şaşırdım, şimdi 10 saniyeden önce sorgumun çalışması için ~ 1 saniye sürüyor.
Mevcut dizinimi bu yeni sorguyu kapsayacağını varsaydım, bu yüzden sorum şu: Neden yeni sorgumda kullanılan sütunlarda yeni bir dizin oluşturmak performansı artırdı? Cümlelerimde kullanılan her bir benzersiz sütun birleşimi için bir dizin oluşturmalı mıyım where
?
Not: Bunun SQL Server'ın sonuçlarımı önbelleğe alması nedeniyle olduğunu düşünmüyorum, dizini oluşturmadan önce sorguyu yaklaşık 25-30 kez çalıştırdım ve sürekli olarak 10-15 saniye sürdü, dizinden sonra artık tutarlı bir şekilde ~ 1 veya daha az.