SQL Server BETWEEN效率不高

时间:2009-11-20 17:29:00

标签: sql-server

我记得在某处听到或读过

SELECT * from TABLE where date >= '2009-01-01' AND date <= '2009-12-31'

更有效
SELECT * from TABLE where date BETWEEN '2009-01-01' AND '2009-12-31'

其中date列是DATETIME类型且具有相同的索引。这是对的吗?

1 个答案:

答案 0 :(得分:11)

不,这不正确。

两种语法完全相同。

BETWEEN只是一种语法糖,是>= … AND <= …

的简写

所有主要系统(OracleMySQLPostgreSQL)都是如此,不仅适用于SQL Server

但是,如果要检查当前年份的日期,则应使用以下语法:

date >= '2009-01-01' AND date < '2010-01-01'

请注意,最后一个条件是严格的。

语义BETWEEN不同,它是查询当前年份的首选方式(而不是YEAR(date) = 2009不可搜索的。)

您不能将此条件重写为BETWEEN,因为上一个不等式是严格的,BETWEEN条件包括范围边界。

你需要严格的条件,因为DATETIME不像整数,不是well-ordered,也就是你不能告诉“2009中的最后一个可能的日期时间值”(这不是当然是特定于实现的。)