Đây có thể không phải là vấn đề lập chỉ mục, mà là một vấn đề của thiết kế dữ liệu. Chuẩn hóa, chính xác là. Thực tế là bạn cần truy vấn các giá trị riêng biệt của một trường và thậm chí sẵn sàng thêm chỉ mục, là một chỉ báo mạnh mẽ rằng trường đó nên được chuẩn hóa thành một bảng riêng biệt với một khóa tham gia (nhỏ). Sau đó, các giá trị khác biệt sẽ có sẵn ngay lập tức bằng cách quét bảng nước ngoài tra cứu nhỏ hơn nhiều.
Cập nhật
như một giải pháp thay thế, bạn có thể tạo một chế độ xem được lập chỉ mục trên tổng hợp của trường 'riêng biệt'. COUNT_BIG
là tổng hợp được phép trong các chế độ xem được lập chỉ mục:
create view vwDistinct
with schemabinding
as select x, count_big(*)
from schema.hugetable
group by x;
create clustered index cdxDistinct on vwDistinct(x);
select x from vwDistinct with (noexpand);