Tôi có cá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 đa 125 LogItems
Tại sao tạo chỉ mục mới này cải thiện hiệu suất nhiều khi chỉ mục hiện tại bao gồm tất cả các cột trong chỉ mục mới?
Truy vấn được đề cập phức tạp nên tôi bỏ qua (nếu ai đó cho rằng điều quan trọng là tôi có thể đăng), nhưng khi tôi chạy Truy vấn ước tính SSMS kế hoạch, nó nói với tôi một chỉ số Non-Clustered mới sẽ cải thiện hiệu suất lên đến 100%.
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Chỉ để cho vui, tôi đã tạo chỉ mục mới này và chạy truy vấn và nhiều bất ngờ, bây giờ mất ~ 1 giây để truy vấn của tôi chạy, trước khoảng 10 giây.
Tôi cho rằng chỉ mục hiện tại của mình sẽ bao gồm truy vấn mới này, vậy câu hỏi của tôi là tại sao tạo chỉ mục mới trên các cộ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ó chỉ mục cho từng kết hợp cột duy nhất được sử dụng trong các điều khoản where
của mình không?
lưu ý: Tôi không nghĩ rằng đây là do SQL Server là bộ nhớ đệm 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 ra các chỉ mục và nó consistantly mất 10-15 giây, sau khi chỉ số nó bây giờ là nhất quán ~ 1 hoặc ít hơn.
Trước khi bạn tạo chỉ mục không bổ sung, kế hoạch thực hiện * thực tế * hiển thị cho việc sử dụng chỉ mục là gì? –
Hiệu suất được cải thiện 100% là bao nhiêu? – JeffO
@Shark Câu hỏi hay, tôi không chắc chắn. Đây là tình huống gỡ lỗi hiệu suất đầu tiên của tôi. Tôi chắc chắn sẽ nắm lấy điều đó trong tương lai. Tất cả những gì nó nói là 'Thiếu chỉ mục' và nó nói những trường nào. – Nate