Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Optimieren der Verwendung der OR-Klausel bei Verwendung mit Parametern (SQL Server 2008)

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.