我想知道以下哪项是最好的实施方式和原因。
select * from table1 where request_time between '01/18/2012' and '02/17/2012'
和
select * from table1 where request_time > current_date - 30
答案 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的值。如果要消除这些值,请使用>和<。
当应用索引时,请说明日期列>和<很好地利用了索引而不是。