SQL Server
ist nicht sehr gut darin, das OR
zu optimieren Prädikate.
Verwenden Sie dies:
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
wird vor der Ausführung der Abfragen nach den Werten der Variablen suchen und die redundanten Abfragen herausoptimieren.
Das bedeutet, dass nur eine von vier Abfragen tatsächlich ausgeführt wird.