Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postesql中加入模糊时间戳并实现更好的速度_Sql_Performance_Postgresql - Fatal编程技术网

在Postesql中加入模糊时间戳并实现更好的速度

在Postesql中加入模糊时间戳并实现更好的速度,sql,performance,postgresql,Sql,Performance,Postgresql,我正试图通过匹配两个表的时间戳字段来连接它们,加上或减去1秒 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.timest

我正试图通过匹配两个表的时间戳字段来连接它们,加上或减去1秒

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

有没有更高效的方法来编写此查询

正如戴尔在评论中指出的那样

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

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

如果存在多个匹配项,是否需要它们?你能把历元划分成3秒的间隔,然后用这种方式进行比较吗?不,因为如果一条记录在3秒历元交替之前或之后,那么两条非常接近的记录将不匹配。我对PostgreSQL不太熟悉,但我知道它有类似于SQL Server中应用概念的横向连接。你不能用这个吗?类似于ctc.table1 t1横向选择中的伪代码。。。从表2中t2,其中t2.timestamp在t1.timestamp-1和t1.timestamp+1之间?顺便说一句,我会在t1.timestamp在t2.timestamp-间隔“1”秒和t2.timestamp+间隔“1”秒之间使用;,但这主要是装饰性的。使用索引。不要将数据包装在终止索引使用的函数中,即“t2.timestamp-INTERVAL”1“SECOND”将使用索引,“EXTRACTEPOCH FROM t2.timestamp-1”不会使用索引。
create index the_index_name on ctc.table1(extract(epoch from timestamp))