【发布时间】:2014-07-22 15:36:48
【问题描述】:
查询表格
select * from foo
where created_on::date = '2014/1/1'
或
select * from foo
where date_trunc('day', created_on) = '2014/1/1'
或
select * from foo
where date(created_on) = '2014/1/1'
在什么条件下不同的查询会更好/更差?这三个选项中哪个最有效?
【问题讨论】:
-
您需要查看执行计划以确定,但一般来说,将表列包装在像您的第二个和第三个示例这样的函数中会阻止任何索引使用,这会使您陷入表扫描。
-
第四种可能性(待测试)是
select * from foo where created_on between '2014/1/1 00:00:00' and '2014/1/2 00:00:00' -
@Brandon:第一个表达式也会阻止索引的使用。
-
好点,它正在铸造。
-
第四个怎么样?因为很明显,如果我们在过滤日期的同时寻找性能,我们可能会使用索引。
标签: sql database performance postgresql