SQL:“BETWEEN”与“current_date - number”之间的区别

时间:2012-02-17 20:07:55

标签: sql postgresql

我想知道以下哪项是最好的实施方式和原因。

select * from table1 where request_time between '01/18/2012' and '02/17/2012'

select * from table1 where request_time > current_date - 30

2 个答案:

答案 0 :(得分:4)

我通过数据库中的一些日期表运行了两个查询,并使用EXPLAIN ANALYZE我找到了这些结果:

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

总运行时间:22.716 ms

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

总运行时间:65.044 ms

所以看起来第一个选项更合理。当然这偏向于我的DBMS,但这些仍然是我得到的结果。

该表的日期范围从1900年到2099年,所以它相当大,而不仅仅是一些小小的桌子。

答案 1 :(得分:3)

之间具有包含范围,即当您发出2到10之间的id之类的查询时,也将获取2和10的值。如果要消除这些值,请使用>和<。

当应用索引时,请说明日期列>和<很好地利用了索引而不是。