Đây là bản trình diễn hiển thị thứ tự của điều kiện mệnh đề WHERE có thể tạo ra sự khác biệt do đoản mạch. Nó chạy các truy vấn sau:
-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Sự khác biệt duy nhất giữa chúng là thứ tự của các toán hạng trong OR
điều kiện.
myslowfunction
cố ý ngủ trong một giây và có tác dụng phụ là thêm mục nhập vào bảng nhật ký mỗi khi nó được chạy. Dưới đây là kết quả của những gì được ghi lại khi chạy hai truy vấn:
myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4
Ở trên cho thấy rằng một hàm chậm được thực thi nhiều lần hơn khi nó xuất hiện ở bên trái của OR
điều kiện khi toán hạng khác không phải lúc nào cũng đúng.
Vì vậy, hãy IMO câu trả lời cho câu hỏi:
là "Đôi khi nó có thể làm được."