sql >> Databáze >  >> RDS >> Sqlserver

Existuje nějaký problém s výkonem při používání ISNULL() v SQL Server?

ISNULL() v klauzuli select má zanedbatelný vliv na výkon. Na druhou stranu v klauzuli where může mít velmi velký dopad na výkon, protože zabraňuje optimalizátoru použít index na tento sloupec.

where isnull(col1, 0) = 0 -- unable to use index, because every 
                          -- row has to be evaluated

where col1 = isnull(@myVar, 0) -- index will be used, since isnull(@myVar, 0) 
                               -- returns the same static value for every row and 
                               -- not every row has to be evaluated by the function.

Takže při použití isnull() v klauzuli where vyhodnoťte, zda to brání optimalizátoru dotazů v použití indexu. Pokud ano, zvažte vytvoření vypočítaného sloupce s výsledkem if isnull(col1, 0) a indexujte vypočítaný sloupec a použijte jej ve své klauzuli where.



  1. MYSQL:POKUD se shoduje podmínka NEBO ®EXP

  2. Sbalení datových záznamů pouze v případě, že se hodnota nezmění - Oracle SQL

  3. SQL server při aktualizaci nastavil aktuální časové razítko

  4. Velikost pole VARBINARY v SQL Server 2005