Hãy xem xét hai tuyên bố sau:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Nếu CONDITION 1
là TRUE
, sẽ CONDITION 2
được kiểm tra?
Nếu CONDITION 3
là FALSE
, sẽ CONDITION 4
được kiểm tra?
Điều gì về các điều kiện trên WHERE
: công cụ SQL Server có tối ưu hóa tất cả các điều kiện trong một WHERE
mệnh đề không? Các lập trình viên có nên đặt các điều kiện theo đúng thứ tự để chắc chắn rằng trình tối ưu hóa SQL Server giải quyết nó theo đúng cách?
THÊM:
Cảm ơn Jack đã liên kết, bất ngờ từ mã t-sql:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
Trong trường hợp này, không có sự phân chia nào bằng 0 .
PHẦN KẾT LUẬN:
Nếu C ++ / C # / VB bị đoản mạch thì tại sao SQL Server không có nó?
Để thực sự trả lời điều này, chúng ta hãy xem làm thế nào cả hai làm việc với các điều kiện. C ++ / C # / VB đều có tính năng đoản mạch được xác định trong thông số kỹ thuật ngôn ngữ để tăng tốc độ thực thi mã. Tại sao phải đánh giá các điều kiện N HOẶC khi điều kiện đầu tiên đã đúng hoặc điều kiện M VÀ khi điều kiện đầu tiên đã sai.
Chúng tôi là nhà phát triển phải nhận thức được rằng SQL Server hoạt động khác nhau. Đây là một hệ thống dựa trên chi phí. Để có được kế hoạch thực hiện tối ưu cho truy vấn của chúng tôi, bộ xử lý truy vấn phải đánh giá mọi điều kiện và gán cho nó một chi phí. Các chi phí này sau đó được đánh giá toàn bộ để tạo thành một ngưỡng phải thấp hơn ngưỡng xác định mà SQL Server có cho một kế hoạch tốt. Nếu chi phí thấp hơn ngưỡng xác định, kế hoạch được sử dụng, nếu không, toàn bộ quá trình được lặp lại một lần nữa với sự pha trộn khác nhau của chi phí điều kiện. Chi phí ở đây là quét hoặc tìm kiếm hoặc tham gia hợp nhất hoặc tham gia băm, v.v ... Do đó, việc ngắn mạch như có sẵn trong C ++ / C # / VB đơn giản là không thể. Bạn có thể nghĩ rằng việc sử dụng chỉ mục trên một cột được tính là ngắn mạch nhưng thực tế không phải vậy. Nó chỉ buộc sử dụng chỉ số đó và rút ngắn danh sách các kế hoạch thực hiện có thể. Hệ thống vẫn dựa trên chi phí.
Là một nhà phát triển, bạn phải biết rằng SQL Server không thực hiện đoản mạch như được thực hiện trong các ngôn ngữ lập trình khác và bạn không thể làm gì để buộc nó phải làm.