SQL Server
не е много добър в оптимизирането на OR
предикати.
Използвайте това:
SELECT key3
FROM or_table
WHERE @key1 = 0
AND @key2 = 0
UNION ALL
SELECT key3
FROM or_table
WHERE @key1 = 0
AND @key2 <> 0
AND key2 = @key2
UNION ALL
SELECT key3
FROM or_table
WHERE @key2 = 0
AND @key1 <> 0
AND key1 = @key1
UNION ALL
SELECT key3
FROM or_table
WHERE @key1 <> 0
AND @key2 <> 0
AND key1 = @key1
AND key2 = @key2
SQL Server
ще търси стойностите на променливите преди да изпълни заявките и ще оптимизира излишните заявки.
Това означава, че действително ще бъде изпълнена само една заявка от четири.