在 Postgres 中有效地将时间戳截断到 5 分钟边界
截断时间戳对于时间分析至关重要。 Postgres 提供了 date_trunc 函数,使我们能够将时间戳舍入到各种单位。然而,为了截断到最近的 5 分钟边界,需要更具体的方法。
通常采用以下简单方法:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
但是,当性能至关重要时,探索尽可能最快的解决方案至关重要。
替代方法:穿越纪元时间
另一种方法是将时间戳转换为纪元时间戳,然后截断它。该方法表示为:
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht LIMIT 4000000
基准测试和结果
为了评估这两种方法的性能,针对一个包含 400 万个数据的大表进行了非正式基准测试行。交替查询以防止缓存优势。
结果:
Method | Run 1 | Run 3 | Run 5 |
---|---|---|---|
Epoch Time | 39.368 seconds | 39.526 seconds | 39.883 seconds |
Hour and Minute | 34.189 seconds | 37.028 seconds | 32.397 seconds |
结论
令人惊讶的是,该方法使用date_trunc 和 date_part 始终优于纪元时间方法。尽管纪元时间方法更通用且更容易参数化,但它会牺牲一些性能来实现更广泛的时间单位截断。
因此,为了将时间戳截断到 5 分钟边界(特别是在 Postgres 中),使用 date_trunc 的简单方法而 date_part 是推荐的方法。
以上是在 PostgreSQL 中将时间戳截断为 5 分钟间隔的最快方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!