如果我想对一列时间戳进行分组,比如registered_at
按它们发生的日期,我可以使用date_trunc('day', registered_at)
或registered_at::date
。第一个从时间戳中删除小时和更小的单位,但仍返回时间戳,而后者将时间戳返回到日期。现在,我想知道两者是否有比另一个更好的性能。
当我查看查询计划时,理论上的成本是完全一样的,在实际执行时间中可能会有很多噪音。
-- SELECT date_trunc('day', registered_at)
Seq Scan on customers (cost=0.00..5406.45 rows=23987 width=8) (actual time=0.023..46.811 rows=24436 loops=1)
Filter: (created_at > '2019-06-01 00:00:00'::timestamp without time zone)
Rows Removed by Filter: 113958
Planning time: 0.107 ms
Execution time: 48.158 ms
-- SELECT registered_at::date
Seq Scan on customers (cost=0.00..5406.45 rows=23987 width=4) (actual time=0.017..34.353 rows=24436 loops=1)
Filter: (created_at > '2019-06-01 00:00:00'::timestamp without time zone)
Rows Removed by Filter: 113958
Planning time: 0.121 ms
Execution time: 35.548 ms
有谁知道在截断或随后使用时哪种方法更快group by
?