有谁能告诉我提高SQL性能的方法?
select A, B from T_XXX
where isnull(DateX, DateY) >= getdate()
(补充评论) 谢谢你的回复!如果你考虑"没有索引"作为先决条件,是否还有改进SQL的空间?
答案 0 :(得分:2)
提高性能的最简单方法是在ISNULL(DateX, DateY)
上创建索引。在DateX
和/或DateY
上设置单个索引可能无济于事,因为ISNULL
函数可能会否定使用索引的能力。
如果 在任一列上都有索引,则可以将该子句重写为
WHERE DateX >= GETDATE() OR (DateX IS NULL AND DateY >= GETDATE())
可以利用任何一个索引。
SQL Server 可能在内部将ISNULL
转换为使用索引的等效子句,但您必须以两种方式尝试并查看是否存在性能改进一定,“
如果您认为“无索引”为先决条件,那么SQL还有改进的余地吗?
不直接。 SQL是声明性,这意味着您可以了解自己想要的内容,并提出它认为是收集数据的最佳计划。在这种情况下,只需通过更改SQL就可以做到改变性能。
答案 1 :(得分:1)
您可以通过UNION改善这一点:
select A, B from T_XXX
where DateX >= getdate()
UNION
select A, B from T_XXX
where DateY >= getdate() and DateX IS NULL
但你仍然可能需要索引才能从中获得最大收益。