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

Gibt es ein Leistungsproblem bei der Verwendung von ISNULL() in SQL Server?

ISNULL() in der Select-Klausel hat einen vernachlässigbaren Einfluss auf die Performance. In der Where-Klausel hingegen kann es einen sehr großen Einfluss auf die Performance haben, da es den Optimierer daran hindert, einen Index auf diese Spalte zu verwenden.

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.

Wenn Sie also isnull() in einer Where-Klausel verwenden, prüfen Sie, ob dies den Abfrageoptimierer daran hindert, einen Index zu verwenden. Wenn dies der Fall ist, sollten Sie eine berechnete Spalte mit dem Ergebnis if isnull(col1, 0) erstellen und die berechnete Spalte indizieren und in Ihrer Where-Klausel verwenden.