SQL: "BETWEEN"和"current_date - number"的区别是什么?

5
我想知道以下哪种方式是最佳实现方式,并解释原因。
select * from table1 where request_time between '01/18/2012' and '02/17/2012'

并且

select * from table1 where request_time > current_date - 30

4
门2更受青睐,因为它没有硬编码日期:D - mechanical_meat
不是硬编码日期,我使用一个变量来代替。我在Python中工作,并在那里使用datetime变量。话说回来,门#1会优先考虑吗? - Sri
我过于字面理解并回避了真正的问题,因此露出了咧嘴笑。我在不同的情况下都会使用两者。我没有看到它们之间有明显的性能差异。 - mechanical_meat
2个回答

4

我在我的数据库中运行了这两个查询,并使用EXPLAIN ANALYZE功能得出以下结果:

explain analyze
select * from capone.dim_date where date between '01/18/2012' and '02/17/2012'

总运行时间:22.716毫秒

 explain analyze
select * from capone.dim_date where  date > current_date - 30

总运行时间:65.044毫秒

看起来第一种选项更优。当然,这是偏向于我的数据库管理系统,但这些仍然是我得到的结果。

该表的日期范围从1900年到2099年,因此非常大,不仅仅是一些微不足道的小表。


3

Between包含范围,也就是说,当您发出像id between 2 and 10这样的查询时,值2和10也将被提取。如果要消除这些值,请使用>和<。

此外,当应用索引时,例如在日期列上,>和<比between更好地利用了索引。


4
我很肯定BETWEEN可以像关系运算符一样利用索引。 - Daniel Lyons
我在 request_time 列上有索引。该表每天会获得 1-2 百万条记录。使用第二种方法获取日期需要很长时间。 - Sri
可能不同的数据库管理系统会有不同的行为。 - Shaheer
3
没有看到 EXPLAIN 的输出,就草率地对性能做出推断是可笑的。 - Daniel Lyons
Daniel:如果你指的是我的评论,对不起。 - Sri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接