Tôi đã được đề xuất rằng việc sử dụng các câu lệnh IF trong các lô t-SQL là bất lợi cho hiệu suất. Tôi đang cố gắng tìm một số xác nhận hoặc xác nhận xác nhận này. Tôi đang sử dụng SQL Server 2005 và 2008.
Khẳng định là với lô sau: -
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server không thể sử dụng lại kế hoạch thực hiện được tạo bởi vì lần thực hiện tiếp theo có thể cần một nhánh khác. Điều này ngụ ý rằng SQL Server sẽ loại bỏ hoàn toàn một nhánh khỏi kế hoạch thực hiện trên cơ sở thực hiện hiện tại, nó có thể xác định nhánh nào là cần thiết. Điều này có thực sự đúng không?
Ngoài ra những gì xảy ra trong trường hợp này: -
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
Trường hợp không thể xác định trước chi nhánh nào sẽ được thực hiện?