如何在 PostgreSQL 中执行操作时间查询
原始查询复杂度
原始查询旨在识别“打开”的记录(在指定的操作时间内),由于以下原因而很复杂需要处理工作时间可能会在周末结束的各种情况。为了简化这个过程,我们将采用一种不同的方法,使用名为 tsrange 的数据结构。
引入 tsrange
tsrange 是一种数据类型表示一系列没有时区的时间戳的 PostgreSQL。它提供了一种方便的方式来存储和操作时间间隔。
重新设计表结构
我们将替换现有的列(opens_on、closes_on、opens_at、closes_at ),其中有一个名为“小时”、类型为 tsrange 的列。营业时间将存储为一组 tsrange 值。
示例
例如,以下 tsrange 值表示从周三下午 6 点到周四的营业时间,凌晨 5 点:
'[1996-01-03 18:30, 1996-01-04 05:00]'
查询使用tsrange
更新了表结构,查询变得更加简单:
SELECT * FROM hoo WHERE hours @> f_hoo_time(now())
函数 f_hoo_time() 将带时区的时间戳转换为时间戳,而包含运算符(@>) 检查当前时间是否在指定时间范围内。
索引和性能
要使用 tsrange 优化查询,我们建议在小时列上创建 SP-GiST 索引。该索引可以有效地查找时间范围,从而提高查询性能。
结论
通过利用 tsrange 和 SP-GiST 索引,我们可以大大简化运行时间查询并提高其性能。这种方法比原始查询更高效、更稳健。
以上是PostgreSQL 的'tsrange”如何简化和优化操作时间查询?的详细内容。更多信息请关注PHP中文网其他相关文章!