SQL Server
är inte särskilt bra för att optimera OR
predikat.
Använd detta:
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
kommer att titta på variablernas värden innan frågorna körs och kommer att optimera de redundanta frågorna.
Det betyder att endast en fråga av fyra faktiskt kommer att köras.