Tôi có bảng Log và LogItem; Tôi đang viết một truy vấn để lấy một số dữ liệu từ cả hai. Có hàng ngàn Logs
và mỗi Log
có thể có tới 125LogItems
Truy vấn trong câu hỏi rất phức tạp nên tôi bỏ qua nó (nếu ai đó nghĩ nó quan trọng tôi có thể đăng nó), nhưng khi tôi chạy gói Truy vấn Ước tính SSMS, nó đã cho tôi biết một chỉ mục Không phân cụm mới sẽ cải thiện hiệu suất lên tới 100% .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Để giải trí, tôi đã tạo chỉ mục mới này và chạy truy vấn và thật ngạc nhiên, bây giờ mất ~ 1 giây để truy vấn của tôi chạy, khi trước đó là hơn 10 giây.
Tôi giả định rằng chỉ mục hiện tại của tôi sẽ bao gồm truy vấn mới này, vì vậy câu hỏi của tôi là tại sao việc tạo một chỉ mục mới trên các cột duy nhất được sử dụng trong truy vấn mới của tôi cải thiện hiệu suất? Tôi có nên có một chỉ mục cho mỗi tổ hợp cột duy nhất được sử dụng trong where
mệnh đề của mình không?
lưu ý: Tôi không nghĩ rằng điều này là do Máy chủ SQL đang lưu trữ kết quả của tôi, tôi đã chạy truy vấn khoảng 25-30 lần trước khi tôi tạo chỉ mục và nó mất liên tục 10 - 15 giây, sau khi chỉ mục hiện tại nhất quán ~ 1 hoặc ít hơn.