Dự án của chúng tôi chạy một cơ sở dữ liệu rất lớn, rất phức tạp. Vì vậy, khoảng một tháng trước, chúng tôi nhận thấy rằng không gian được sử dụng bởi các cột được lập chỉ mục chứa các giá trị null đang trở nên quá lớn. Để đáp lại điều đó, tôi đã viết dưới dạng tập lệnh sẽ tự động tìm kiếm thông qua tất cả các chỉ mục cột đơn có chứa hơn 1% giá trị null, sau đó thả và tạo lại các chỉ mục đó dưới dạng các chỉ mục được lọc với điều kiện giá trị đó không phải là NULL. Điều này sẽ loại bỏ và tạo lại hàng trăm chỉ mục trong toàn bộ cơ sở dữ liệu và thường giải phóng gần 15% dung lượng được sử dụng bởi toàn bộ DB.
Bây giờ tôi có hai câu hỏi về điều này:
A) Nhược điểm của việc sử dụng các chỉ mục được lọc theo cách này là gì? Tôi cho rằng nó sẽ chỉ cải thiện hiệu suất, nhưng có bất kỳ rủi ro hiệu suất nào liên quan không?
B) Chúng tôi đã nhận được lỗi ( 'không thể bỏ chỉ mục XYZ vì nó không tồn tại hoặc bạn không có quyền' ) khi thả và tạo lại các chỉ mục, mặc dù khi được kiểm tra sau đó, mọi thứ đã diễn ra đúng như mong đợi. Làm thế nào điều này có thể xảy ra?
Cảm ơn vì bất kì sự giúp đỡ!
Chỉnh sửa: Đáp lại @Thomas Kejser
Xin chào và cảm ơn, nhưng hóa ra đây là một thảm họa. Vào thời điểm đó, chúng tôi không hiểu một số điều như:
- Trong một truy vấn, SQLOS tạo các kế hoạch chỉ mục trước khi xác định rằng nó không thể sử dụng các giá trị NULL để nối các cột của bảng. IE, bạn thực sự cần phải có bộ lọc mệnh đề WHERE phù hợp với chỉ mục cho từng và mọi chỉ mục được lọc được sử dụng trong truy vấn, hoặc chỉ mục sẽ hoàn toàn không được sử dụng.
- Bỏ và tạo các chỉ mục và cập nhật dự phòng thống kê của họ một lần nữa sau đó vẫn có thể không đủ để tạo ra các kế hoạch cập nhật, mà chúng tôi cho rằng họ sẽ làm. Nó xuất hiện trong một số trường hợp chỉ một khối lượng công việc đủ cao sẽ buộc SQL Server phải đánh giá lại các kế hoạch.
- Có một số biểu hiện cho chức năng của trình hoạch định thực thi rất khó xác định chỉ bằng ý thức và logic thông thường. Với hàng ngàn biến thể được mã hóa phía sau của các truy vấn khác nhau, các chỉ mục dường như vô dụng có thể giúp ích trong một số thống kê và kế hoạch truy vấn cuối cùng được sử dụng trong các truy vấn quan trọng.
Cuối cùng, những thay đổi này đã được hoàn nguyên. Vì vậy, các chỉ mục được lọc là một công cụ mạnh mẽ, nhưng bạn cần thực sự hiểu chính xác dữ liệu nào đang được tìm nạp từ các cột đó. Khi các chỉ mục bình thường ngoài các vấn đề không gian khá dễ áp dụng, các chỉ mục được lọc đại diện cho các giải pháp rất tùy chỉnh. Chúng chắc chắn không phải là sự thay thế cho một chỉ mục thông thường, thay vào đó là một phần mở rộng cho chúng trong những trường hợp đặc biệt mà chúng được yêu cầu.