Tại sao toán tử tổng hợp được sử dụng sau khi quét chỉ mục duy nhất


15

Tôi có một bảng với một chỉ mục duy nhất được lọc cho các giá trị không thể rỗng. Trong kế hoạch truy vấn có sử dụng riêng biệt. Có một lý do cho điều này?

USE tempdb

CREATE TABLE T1( Id INT NOT NULL  IDENTITY PRIMARY KEY ,F1 INT , F2 INT )
go
CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
GO
INSERT INTO  T1(f1,F2) VALUES(1,1),(1,2),(2,1)

SELECT DISTINCT   F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
SELECT  F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL  

kế hoạch truy vấn: nhập mô tả hình ảnh ở đây

Câu trả lời:


15

Đây là một giới hạn tối ưu hóa truy vấn SQL Server đã biết. Nó đã được báo cáo cho Microsoft, nhưng mục Kết nối (không còn khả dụng) đã bị đóng Không sửa.

Có những hậu quả bổ sung của giới hạn này, bao gồm một số hậu quả mà tôi đã viết trong Giới hạn tối ưu hóa với các chỉ mục được lọc , tóm tắt được trích dẫn dưới đây:

Bài đăng này nêu bật hai hạn chế tối ưu hóa quan trọng với các chỉ mục được lọc:

  • Các biến vị ngữ tham gia dự phòng có thể cần thiết để khớp với các chỉ mục được lọc
  • Các chỉ mục duy nhất được lọc không cung cấp thông tin duy nhất cho trình tối ưu hóa

Trong một số trường hợp, có thể chỉ cần thêm các vị từ dự phòng vào mỗi truy vấn. Cách khác là gói gọn các vị từ ngụ ý mong muốn trong một khung nhìn không được nhìn. Kế hoạch kết hợp băm trong bài đăng này tốt hơn nhiều so với kế hoạch mặc định, mặc dù trình tối ưu hóa phải có thể tìm thấy kế hoạch hợp nhất tốt hơn một chút. Đôi khi, bạn có thể cần lập chỉ mục chế độ xem và sử dụng các NOEXPANDgợi ý (dù sao cũng được yêu cầu cho các phiên bản Standard Edition). Trong các trường hợp khác, không có cách tiếp cận nào trong số này sẽ phù hợp.

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.