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