Kế hoạch thực hiện có đủ thông minh để sử dụng một chỉ mục được lọc như bên dưới không (Tôi chỉ lập chỉ mục các giá trị 0 và null) để tăng hiệu suất?
Không. Không có hỗ trợ trực tiếp trong SQL Server cho loại từ chối hàng đơn toán tử mà bạn dường như có trong tâm trí.
Nói chung hơn, chỉ mục được lọc không trực tiếp hữu ích cho truy vấn đã cho và dù sao đó cũng không phải là định nghĩa bộ lọc chỉ mục hợp lệ. Thay vào đó, bạn có thể tạo chế độ xem được lập chỉ mục có chứa các vị từ đó, nhưng nó vẫn không hữu ích khi xác định vị trí các hàng cho truy vấn đích. Bạn có thể viết lại truy vấn để sử dụng chế độ xem được lập chỉ mục để loại trừ các hàng được tìm nạp bằng quét toàn bộ riêng biệt, nhưng thật khó để xem đó là một ý tưởng hay nói chung như thế nào.
Cách gần nhất bạn có thể nhận được có thể là quét chế độ xem được lập chỉ mục điền vào bộ lọc bitmap, với bộ lọc đó được áp dụng như một phần của quá trình quét toàn bộ bảng mục tiêu. Nó có thể là khó khăn để có được hình dạng kế hoạch truy vấn này đáng tin cậy.
Bạn cũng có thể sử dụng một cột được tính toán bền vững được lập chỉ mục bằng cách sử dụng một CASE
biểu thức, nhưng một lần nữa điều này sẽ yêu cầu viết lại truy vấn ban đầu và sẽ yêu cầu lưu trữ cho mỗi hàng trong bảng, cộng với chỉ mục.
Từ thông tin được cung cấp, có vẻ như điều tốt nhất bạn có thể làm là xác định chỉ mục là:
CREATE NONCLUSTERED INDEX IX_dbo_My_Table__Float_Filtered
ON dbo.My_Table (my_Float_column)
WHERE
my_Float_column <> 0
AND my_Float_column IS NOT NULL;