Có ổn không khi mù quáng thêm các chỉ số bị thiếu?


21

Tôi thường sử dụng SSMS để kiểm tra các thủ tục lưu trữ chậm của mình cho các chỉ mục bị thiếu. Bất cứ khi nào tôi thấy "Chỉ số mất tích (Tác động xxx)", phản ứng đầu gối của tôi là chỉ tạo ra chỉ mục mới. Điều này dẫn đến một truy vấn nhanh hơn mỗi lần tôi có thể nói.

Bất kỳ lý do tại sao tôi không nên tiếp tục làm điều này?


1
bạn có thể cho tôi biết nơi tôi có thể nhận được tính năng chỉ mục bị thiếu này.
Ali Raza Iftikhar

Câu trả lời:


27

Nhiều lý do.

Một trong những điều lớn nhất mà tôi có thể nghĩ đến là DMV chỉ số bị thiếu không tính đến các chỉ mục hiện có.

Thí dụ:

Bạn có một bàn với ColA, ColB, ColC.

Hiện tại bạn có một chỉ số trên ColA. Chỉ số thiếu DMV sẽ đề nghị bạn thêm một chỉ mục trên (ColA, ColB). Điều này có thể đúng, nhưng điều thông minh cần làm là thêm ColBkhóa thứ hai vào chỉ mục hiện có. Nếu không, bạn có bảo hiểm trùng lặp và lãng phí không gian và chi phí.

Tương tự, nếu bạn có một chỉ mục trên ColB INCLUDE (ColA), nó có thể đề xuất một chỉ mục trên ColB INCLUDE (ColC). Một lần nữa, điều thông minh cần làm là thêm ColCvào danh sách bao gồm trong chỉ mục hiện có.

Các chỉ mục được đề xuất có chế độ xem cực kỳ hẹp - chúng chỉ nhìn vào một truy vấn duy nhất hoặc một thao tác trong một truy vấn duy nhất. Họ không tính đến những gì đã tồn tại hoặc các mẫu truy vấn khác của bạn.

Bạn vẫn cần một con người biết suy nghĩ để phân tích chiến lược lập chỉ mục tổng thể và đảm bảo rằng cấu trúc chỉ mục của bạn hiệu quả và gắn kết.

Nếu không có vấn đề gì với việc chỉ cần thêm tất cả các chỉ mục được đề xuất thì sẽ không cần phải đề xuất chúng - chúng sẽ được thực hiện tự động.


Tôi hiểu rồi, có lẽ đó là lý do khiến tôi có chỉ số bazillion. Tôi đoán tôi nên cố gắng hiểu các kế hoạch giải thích này tốt hơn và tìm ra các chỉ mục bằng tay.
OO

Nếu bạn google duplicate index scriptshoặc một cái gì đó tương tự, có rất nhiều tài nguyên để theo dõi những thứ này. Tôi quản lý hầu hết các chỉ mục của riêng mình và biết một chút về nó nhưng thỉnh thoảng tôi vẫn tìm thấy các bản sao.
JNK

"Bạn vẫn cần một con người biết suy nghĩ để phân tích chiến lược lập chỉ mục tổng thể và đảm bảo rằng cấu trúc chỉ mục của bạn hiệu quả và gắn kết." +1! Là một chuyên gia tư vấn, tôi đã có tất cả các loại khách hàng trong tất cả các tình huống. Đôi khi tôi nhận được các máy khách đó vì chúng có quá nhiều chỉ mục (và sai, thừa), v.v.) - tất cả được đề xuất bởi trình cố vấn điều chỉnh công cụ cơ sở dữ liệu.
Mike Walsh

@JNK - Tôi sẽ làm điều đó.
OO

2
Điểm tuyệt vời - các chỉ số chồng chéo chắc chắn là điều lớn nhất cần chú ý ở đây. Và tất nhiên, bạn càng có nhiều chỉ mục, việc chèn càng trở nên chậm hơn, cộng với việc đạt được khả năng duy trì (thêm độ phức tạp), v.v.
Jeff Atwood

8

Tôi khuyên bạn nên sử dụng thận trọng kỹ thuật điều chỉnh này vì tôi đã tìm thấy các đề xuất chỉ mục bị thiếu xuất hiện bởi các kế hoạch truy vấn để luôn kém tin cậy hơn khi các truy vấn và lược đồ DB trở nên phức tạp hơn. Điều này là do nhiều lý do trong kinh nghiệm của tôi:

1) "Cải thiện phần trăm" có thể tắt cho tất cả trừ các truy vấn đơn giản nhất / chỉ mục rõ ràng nhất, sau tất cả, đó chỉ là ước tính và không xuất phát từ chi phí thực tế phát sinh hoặc số hàng thực tế khi truy vấn chạy. Tôi đã thấy chi phí truy vấn tăng lên sau khi thực hiện một chỉ mục được đề xuất hoặc thậm chí nó không được sử dụng và kế hoạch vẫn giữ nguyên.

2) Bản thân kế hoạch truy vấn không tối ưu, do việc xây dựng truy vấn (tham gia và mệnh đề không được tối ưu hóa, v.v.) hoặc ước tính số lượng hàng bị tắt do thống kê bị thiếu / lỗi thời. Lập chỉ mục cho một kế hoạch truy vấn tồi tệ thường là giải pháp hỗ trợ băng tần tốt nhất chỉ với sự cải thiện hiệu suất.

3) Bạn có thể không nhìn thấy toàn bộ bức tranh. Điều này đặc biệt đúng khi chỉ sử dụng gói đồ họa và không xem XML để xem có nhiều hơn một chỉ mục bị thiếu đã được đề xuất hay không. Cái được hiển thị đầu tiên trong kế hoạch đồ họa không nhất thiết là cái có ảnh hưởng nhiều nhất đến truy vấn.

4) Tôi cũng đã gặp rất nhiều ví dụ về các chỉ mục mới được đề xuất khi sửa đổi chỉ mục hiện tại sẽ làm. Xem các câu trả lời khác ở đây về điểm này, chúng được phát hiện ra, không cần tôi phải giải thích thêm.

Tôi chỉ sử dụng các đề xuất chỉ mục bị thiếu làm điểm bắt đầu khi làm việc với một truy vấn / môi trường không quen thuộc để xem nơi nhìn sâu hơn. Tôi đã nhận được kết quả tốt hơn khi xem xét các toán tử trong kế hoạch (chủ yếu là tìm kiếm / quét / tham gia) và kiểm tra cửa sổ công cụ hoặc thuộc tính để xem cột nào có liên quan và sử dụng đó để xác định các ứng cử viên chỉ mục để kiểm tra cải tiến.


2

Có rất nhiều lý do, chủ yếu - biết cách các chỉ mục hoạt động và được lưu trữ - bạn sẽ luôn tạo ra một chỉ mục tốt hơn, hoặc ít nhất - không tệ hơn, đó là các đề xuất SSMS

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.