sql - 模糊时间戳加入 Postesql 并获得更好的速度

标签 sql performance postgresql

我正在尝试通过匹配时间戳字段来连接两个表,加上或减去一秒。

SELECT t1.id, t2.id
FROM ctc.table1 t1
    INNER JOIN ctc.table2 t2
        ON EXTRACT(EPOCH FROM t1.timestamp) 
            BETWEEN EXTRACT(EPOCH FROM t2.timestamp) - 1 
                AND EXTRACT(EPOCH FROM t2.timestamp) + 1

是否有更高效的方式来编写此查询?

最佳答案

正如 Dale 在评论中指出的那样

ON t1."timestamp" BETWEEN 
    t2."timestamp" - INTERVAL '1' SECOND AND 
    t2."timestamp" + INTERVAL '1' SECOND

Craig Ringer 提出的变体可以使用通用索引,而您的变体只能使用专门构建的索引,例如

create index the_index_name on ctc.table1(extract(epoch from timestamp))

关于sql - 模糊时间戳加入 Postesql 并获得更好的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748796/

相关文章:

sql - 创建多个连接表的 View 是否比直接使用查询中的连接直接获取该数据更快?

带有偏移的 MySQL 选择比没有偏移更快

performance - 如何使 Perl 的 File::Find 更快?

ruby-on-rails - 如何使用 postgresql 在 Rails 中执行不区分大小写的顺序

json - 使用postgresql从Flask-SQLAlchemy中的JSON字段查询值

mysql - 如何在MySql中返回具有相同列值的行

SQL 按最近日期选择具有两个唯一列的行

SQL Server 2005 : Determine datatype of variable

javascript - 如何通过父 id-s 加深数组 (JavaScript)

带有 SQL 开发人员问题的 PostgreSQL