gpt4 book ai didi

sql - PostgreSQL 基于范围的连接工作太慢

转载 作者:行者123 更新时间:2023-11-29 13:55:56 24 4
gpt4 key购买 nike

假设我有 2 个表,其中包含一些具有以下结构的事件和回调:

Event:
id
timestamp (BIGINT, btree index)
type (VARCHAR, btree index)
(pair index (timestamp, type))

Callback:
id
timestamp (BIGINT, btree index)
event_type

事件表包含大约 (M=) 300000 行,回调大约 (N=) 25000。我尝试做一些类似的事情:

SELECT * FROM Callback
JOIN Event
ON ABS(Callback.timestamp - Event.Timestamp) < 300000 AND
Callback.event_type = Event.type;

按照计划,它应该适用于 O(N log(M) + R)(其中 R - 是结果大小。R 大约为 1000000(每个订单平均 50 个事件)),但实际上它适用于大约 40分钟在强大的 CPU 上。

UPD:对不起,忘了说,我试试:

SELECT * FROM Callback
JOIN Event
ON Event.Timestamp < Callback.timestamp + 300000 AND
Event.Timestamp > Callback.timestamp - 300000 AND
Callback.event_type = Event.type;

但没有任何改变。

谁能告诉我,我做错了什么?谢谢。

最佳答案

也许以下内容将与 event(type, timestamp) 上的索引一起使用:

SELECT *
FROM Callback c JOIN
Event e
ON c.event_type = e.type AND e.Timestamp > c.timestamp - 300000;

想法是保留其中一个时间戳列不做任何修改。这些可以防止索引的使用。

我确实想知道您是否也想要 c.timestamp >= e.TimeStamp 上的条件。您的性能问题可能只是您返回的数据量。

关于sql - PostgreSQL 基于范围的连接工作太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31941176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com