Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Existe-t-il un problème de performances lors de l'utilisation de ISNULL() dans SQL Server ?

ISNULL() dans la clause select a une influence négligeable sur les performances. Dans la clause where, en revanche, cela peut avoir un impact très important sur les performances, car il empêche l'optimiseur d'utiliser un index sur cette colonne.

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.

Ainsi, lorsque vous utilisez isnull() dans une clause where, évaluez si cela empêche l'optimiseur de requête d'utiliser un index. Si tel est le cas, envisagez de créer une colonne calculée avec le résultat if isnull(col1, 0) et indexez la colonne calculée et utilisez-la dans votre clause where.