kbv*_*hnu 15 sql sql-server sql-server-2005 sql-server-2008
我ISNULL在MS SQl服务器2008中使用,因为我的表太大了,是否使用ISNULL可能会对性能产生任何影响?
提前致谢
小智 49
select子句中的ISNULL()对性能的影响可以忽略不计.另一方面,在where子句中,它会对性能产生非常大的影响,因为它会阻止优化器在该列上使用索引.
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.
Run Code Online (Sandbox Code Playgroud)
因此,在where子句中使用isnull()时,请评估它是否阻止查询优化器使用索引.如果是这样,考虑创建一个带有结果的计算列,如果是isnull(col1,0)并索引计算列并在where子句中使用它.
Ole*_*Dok 13
是的,它可以.对于优化器,最好重写查询(如果可能)以形成
(Field = @x OR @x IS NULL)
Run Code Online (Sandbox Code Playgroud)
因为在某些情况下使用函数会阻止优化器使用统计信息,有时会强制使用隐式数据类型转换