首页 > 数据库 > mysql教程 > 在 PostgreSQL 中将时间戳截断为 5 分钟间隔的最快方法是什么?

在 PostgreSQL 中将时间戳截断为 5 分钟间隔的最快方法是什么?

DDD
发布: 2024-12-26 12:14:10
原创
571 人浏览过

What's the Fastest Way to Truncate Timestamps to 5-Minute Intervals in PostgreSQL?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板