我们有一个表为NULL或“Accepted”作为值。我的查询返回大约250行。
如果我添加 -
的where条件AND Description = 'Accepted'
我的250行在2秒后返回。
但是,如果我添加 -
的where条件ISNULL(Description, '') = 'Accepted'
我的250行在47秒内返回。
有没有人在使用ISNULL功能时遇到性能问题?不幸的是,我在程序上仅限于此时必须使用ISNULL。
答案 0 :(得分:12)
在函数内部包含字段时,它会更改优化程序的运行方式并强制它忽略索引。
答案 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