Tôi cố gắng để tối ưu hóa một truy vấn mà làm điều gì đó như thế này:Biểu thức SQLServer CASE - đánh giá ngắn mạch?
SELECT
...
CASE WHEN (condition) THEN (expensive function call #1)
ELSE (expensive function call #2)
END
...
Kế hoạch truy vấn cho thấy đối với ngay cả trong trường hợp 100% các hàng thỏa mãn các quy định tại khoản KHI, một phần đáng kể thời gian là chi tiêu trong gọi đến kết quả trong nhánh ELSE. Cách duy nhất tôi có thể hiểu được điều này là giả sử rằng SQLServer đang đánh giá cả hai kết quả, sau đó chỉ chọn một dựa trên đánh giá điều kiện WHEN, nhưng tôi không thể tìm thấy bất kỳ tham chiếu dứt khoát nào cho dù có hay không kết quả của một câu lệnh CASE được đánh giá trước các điều kiện. Bất cứ ai có thể vui lòng làm rõ hoặc chỉ cho tôi một tham chiếu?
Tôi không thể xác nhận điều này, ngay cả khi tôi thử một hàm đắt tiền truy vấn một bảng lớn. Nếu tôi đặt phần đầu tiên của CASE thành đúng 100% nếu thời gian, truy vấn của tôi mất 5 giây. Nếu không, khoảng 10 phút. Phiên bản SQL Server nào? – MartW