Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi có thể tối ưu hóa truy vấn SELECT DISTINCT x FROM giantTable bằng cách tạo chỉ mục trên cột x không?

Đâ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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm bản ghi tối đa cho phạm vi đã cho

  2. Các bảng rất lớn trong SQL Server

  3. Làm cách nào để thêm các thuộc tính tùy chỉnh vào chuỗi kết nối SQL?

  4. Tính toán phạm vi ngày bị thiếu và phạm vi ngày trùng lặp giữa hai ngày

  5. Thay thế nhiều ký tự từ chuỗi mà không sử dụng bất kỳ hàm thay thế lồng nhau nào