Если я хочу сгруппировать столбец временных отметок, скажем 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
?