Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottimizzare l'uso della clausola OR quando viene utilizzata con i parametri (SQL Server 2008)

SQL Server non è molto bravo nell'ottimizzare OR predicati.

Usa questo:

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 esaminerà i valori delle variabili prima di eseguire le query e ottimizzerà le query ridondanti.

Ciò significa che verrà effettivamente eseguita solo una query su quattro.