INDEX NONCLUSTERED chưa sử dụng vẫn có thể tăng tốc độ truy vấn?


13

Đây là một tình huống kỳ lạ, nhưng tôi hy vọng ai đó có câu trả lời.

Trong một số khắc phục sự cố về hiệu suất, chúng tôi đã thêm INDEX NONCLUSTERED vào bảng, theo yêu cầu của sp_BlitzIndex. Chúng tôi đã kiểm tra việc sử dụng nó vào ngày hôm sau và nó cho thấy 0 lần đọc ( 0 lần quét / tìm kiếm, 0 lần tra cứu đơn lẻ ), vì vậy chúng tôi đã vô hiệu hóa nó.

Ngay phút sau, chúng tôi nhận được đơn khiếu nại về sự chậm trễ của ứng dụng (sự cố về hiệu suất) mà chúng tôi đã cố gắng kiểm tra & giải quyết ngay từ đầu khi chúng tôi thêm INDEX.

Bây giờ, tôi biết trong lý thuyết, điều này nghe hoàn toàn ngẫu nhiên. INDEX đã được chứng minh, có thể đo lường được, KHÔNG ĐƯỢC SỬ DỤNG . Vô hiệu hóa nó KHÔNG NÊN làm giảm hiệu suất truy vấn. Nhưng nó gần như TOO trùng hợp ngẫu nhiên.

Câu hỏi

Vì vậy, câu hỏi của tôi, đơn giản là đủ, là như vậy:

khả năng nào không , rằng INDEX KHÔNG GIỚI HẠN, có số liệu thống kê sử dụng (từ DMVs / sp_BlitzIndex) hiển thị KHÔNG sử dụng, vẫn đang giúp hiệu suất truy vấn bằng cách nào đó trên bảng bị ảnh hưởng?


PS: Xin hãy dành cho tôi câu tục ngữ "Đi kiểm tra đi!" phản ứng; Tôi phải đợi đến ngày mai để kiểm tra vì bảng được sử dụng nhiều và chỉ mục sẽ không được bật lại (xây dựng lại) cho đến khi cửa sổ bảo trì hàng đêm. Và bản chất của những rắc rối về hiệu suất vẫn còn lẻ tẻ & khó tái tạo; Tôi không nói "Không, tôi sẽ không kiểm tra nó", tôi đang nói rằng tôi biết chúng ta phải kiểm tra và lên kế hoạch cho nó, nhưng tôi đang hỏi về lý thuyết và / hoặc kiến ​​thức kinh nghiệm.
NateJ

1
Bạn có thể thấy bài viết trên blog này hữu ích; brentozar.com/archive/2016/11/ trên
Rich Benner

Câu trả lời:


13

Có, khi SQL Server quyết định rằng số liệu thống kê từ chỉ mục đó chính xác / hữu ích hơn và sử dụng số liệu thống kê đó để thực hiện các ước tính và đưa ra kế hoạch.

Tôi đã gặp tình huống khi SQL Server quyết định sử dụng số liệu thống kê từ một chỉ mục và quét / tìm kiếm một chỉ mục khác.

Chỉnh sửa - Điều này có thể không áp dụng được vì tôi mới nhận ra rằng bạn đã tắt chỉ mục. Tôi chưa thử kịch bản đó.


Cảm ơn bạn đã phản hồi rõ ràng, súc tích! Vâng không, nó không bị vô hiệu hóa ngay lập tức, nó được kích hoạt & hoàn toàn "sống" cho đến khi tôi vô hiệu hóa nó vài giây trước khi người dùng phàn nàn / làm chậm hiệu suất. Bạn tốt :)
NateJ

1
@NateJ Lý thuyết đó có thể được kiểm tra bằng CREATE STATISTICSthay vì CREATE INDEX.
Jakub Kania
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.