Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como otimizar o uso da cláusula OR quando usada com parâmetros (SQL Server 2008)


SQL Server não é muito bom em otimizar o OR predicados.

Usa isto:
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 examinará os valores das variáveis ​​antes de executar as consultas e otimizará as consultas redundantes.

Isso significa que apenas uma das quatro consultas será realmente executada.