Việc sử dụng logic KHÔNG liên quan đến các chỉ mục


12

Theo cuốn sách của Microsoft về phát triển cơ sở dữ liệu Bài kiểm tra 70-433: Phát triển cơ sở dữ liệu Microsoft SQL Server 2008 :

Các ký tự đại diện hàng đầu không logic KHÔNG cho phép trình tối ưu hóa truy vấn sử dụng các chỉ mục để tối ưu hóa tìm kiếm. Để có hiệu suất tối ưu, bạn nên tránh sử dụng từ khóa KHÔNG và các ký hiệu đại diện hàng đầu.

Vì vậy, tôi đã làm điều đó để được NOT IN, NOT EXISTSvv

Bây giờ liên quan đến câu hỏi SO này , tôi nghĩ rằng giải pháp được chọn bởi @GBN sẽ vi phạm tuyên bố nêu trên.

Rõ ràng là không.

Vì vậy, câu hỏi của tôi là: Tại sao?

Câu trả lời:


21
  • NOT IN (SELECT ...)NOT EXISTS (SELECT .. WHERE correlation..)là "Chống bán tham gia". Đó là, hoạt động dựa trên bộ được công nhận

  • WHERE NOT (MyColumn = 1) là một bộ lọc yêu cầu tất cả các hàng phải được xem xét

Để biết thêm thông tin, xem:

Chỉnh sửa: cho đầy đủ

THAM GIA TRÁI thường thực hiện tồi tệ hơn. Xem http://explainextends.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server

Trang web này cũng lưu ý rằng trong MySQL, KHÔNG EXISTS không được tối ưu hóa như các RDBMS khác và LEFT THAM GIA là tốt hơn

Trong SQL Server, tôi biết từ kinh nghiệm rằng LEFT THAM GIA không chạy cũng như KHÔNG HIỆN TẠI. Bạn cũng thường cần DISTINCT để có kết quả tương tự với bước xử lý khác.


0

Tôi sử dụng một lựa chọn phụ cho việc này:

SELECT m* from Main AS m 
    WHERE m.id NOT IN 
        (SELECT m2.id FROM Main AS m2 
           WHERE m2.id IN (...possibly null/empty list goes here...));

Tất nhiên nếu bảng của bạn lớn, bạn sẽ muốn phân tích điều này để kiểm tra hiệu suất. Nếu bạn có các mệnh đề bổ sung lọc kết quả trong truy vấn chính, bạn có thể cần sao chép chúng trong phần chọn phụ. Nhưng bất kể, lựa chọn phụ có "IN" so với "KHÔNG IN" và do đó có thể có kết quả kích thước khác nhau và thông thường, vấn đề hiệu năng truy vấn, vì vậy hãy phân tích phương pháp này khi sử dụng với một bảng lớn.

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.