ISNULL减慢了查询速度

时间:2011-10-24 15:10:02

标签: sql-server-2008

我们有一个表为NULL或“Accepted”作为值。我的查询返回大约250行。

如果我添加 -

的where条件
AND Description = 'Accepted'

我的250行在2秒后返回。

但是,如果我添加 -

的where条件
ISNULL(Description, '') = 'Accepted'

我的250行在47秒内返回。

有没有人在使用ISNULL功能时遇到性能问题?不幸的是,我在程序上仅限于此时必须使用ISNULL。

4 个答案:

答案 0 :(得分:12)

在函数内部包含字段时,它会更改优化程序的运行方式并强制它忽略索引。

见这里:What makes a SQL statement sargable?

答案 1 :(得分:8)

您还可以使用以下方法完全绕过这些功能:

WHERE (Description = 'Accepted' OR Description IS NULL)

答案 2 :(得分:3)

使用

ISNULL(Description, '') = 'Accepted'

在你的情况下在这种情况下没有任何意义。如果描述为null,则为

的原始where子句
AND Description = 'Accepted'

仍然足够。 您基本上在描述为空的每一行中比较''与'已接受'。

请详细说明您要通过查询完成的工作,我想您可能会走错方向。

答案 3 :(得分:2)

如果您尝试在WHERE条件中使用它,请使用IS NULL,而不是ISNULL

  

SELECT字段FROM表WHERE description为null

或相反的

  

SELECT字段FROM表WHERE NOT description为null