其中 isnull (DateX, DateY) >= getdate()

where isnull (DateX, DateY) >= getdate()

谁能告诉我提高下面 SQL 性能的方法?

select A, B from T_XXX
where isnull(DateX, DateY) >= getdate()

(已添加评论) 感谢您的答复!如果你把"No Indexes"作为先决条件,那么SQL有没有改进的空间?

提高性能的最简单方法是在 ISNULL(DateX, DateY) 上创建索引。在 DateX and/or DateY 上设置单独的索引可能无济于事,因为 ISNULL 函数可能会否定使用索引的能力。

如果您 did 在任一列上都有索引,您可以将子句重写为

WHERE DateX >= GETDATE() OR (DateX IS NULL AND DateY >= GETDATE())

这可以利用任一索引。

SQL 服务器 可能 在内部将 ISNULL 转换为使用索引的等效子句,但您必须两种方式都尝试看看是否有性能改进可以确定,'

If you consider "No Indexes" as prerequisite, is there any room for improvement of the SQL?

不直接。 SQL 是 声明式的 ,这意味着您可以告诉它您想要什么,它会提出它认为是收集数据的最佳计划。在这种情况下,仅通过更改 SQL 就无法改变性能。

您或许可以通过 UNION 改进这一点:

select A, B from T_XXX
where DateX >= getdate()

UNION

select A, B from T_XXX
where DateY >= getdate() and DateX IS NULL

但您仍然可能需要索引才能从中获得最大收益。