SQL Server
nie jest zbyt dobry w optymalizacji OR
predykaty.
Użyj tego:
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
sprawdzi wartości zmiennych przed wykonaniem zapytań i zoptymalizuje zbędne zapytania.
Oznacza to, że w rzeczywistości zostanie wykonane tylko jedno zapytanie z czterech.