相对于使用<和>运算符比较上限和下限日期,我对BETWEEN关键字的性能存在疑问。
示例:
WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1
WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()
以上两个查询都应输出完全相同的行数,但是,我是否假设BETWEEN关键字在幕后执行包含性比较(> =或<=),这不如执行<或>比较第二个查询?
答案 0 :(得分:0)
根据MSDN:BETWEEN
如果test_expression的值大于或等于begin_expression的值且小于或等于end_expression的值,则BETWEEN返回TRUE。
所以你说得对,它具有包容性。
关于您有关性能的第一部分,我相信BETWEEN
只是使用>=
和<=
的语法的别名。只是为了简化查询并使查询更具可读性。
我的假设基于以下线程:
答案 1 :(得分:0)
这两个不一样!
WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1
WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()
如果EncDate
是没有时间成分的日期,则它们将产生相同的结果集 。否则,它们是不同的。
一般建议使用:
WHERE EncDate >= '2010-04-30' AND
EncDate < CONVERT(DATE, GETDATE())
关于是否存在时间成分,这具有相同的含义。
我很确定从优化的角度来看,它们是完全相同的。当使用数据库时,与比较时间相比较小的东西通常不会对性能产生影响-昂贵的操作会移动数据。
Aaron Bertrand对于将BETWEEN
与日期/时间数据类型称为What Do Between And The Devil Have In Common一起使用进行了很好的讨论。