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

Sono presenti problemi di prestazioni durante l'utilizzo di ISNULL() in SQL Server?

ISNULL() nella clausola select ha un'influenza trascurabile sulle prestazioni. Nella clausola where, invece, può avere un enorme impatto sulle prestazioni, poiché impedisce all'ottimizzatore di utilizzare un indice su quella colonna.

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.

Pertanto, quando si utilizza isnull() in una clausola where, valutare se impedisce a Query Optimizer di utilizzare un indice. In tal caso, considera la creazione di una colonna calcolata con il risultato if isnull(col1, 0) e indicizza la colonna calcolata e usala nella tua clausola where.