我有一个包含约5000万个条目的Postgresql表。现在,我想通过查找第一次和最后一次出现时间戳来找到两个id,以便给我一系列输入。
查找“第一个” ID大约需要100毫秒。
但是找到第二个ID大约需要3分钟。
查询以查找第一个ID
SELECT id
FROM transactions
WHERE "hashBlock" =
(SELECT hash
FROM blocks
WHERE n_time > 1262300400
ORDER BY id ASC
LIMTI 1)
ORDER BY id ASC
LIMTI 1
查询以查找第二个ID
Select id
FROM transactions
WHERE "hashBlock" =
(SELECT hash
FROM blocks
WHERE n_time < 1306879200
ORDER BY id DESC
LIMTI 1)
ORDER BY id DESC
LIMTI 1
我猜想查询的运行时间会更长,从第一个ID开始直到找到一个满足查询条件的ID,第二个从最后一个ID开始。
有什么方法可以加快第二个查询的速度吗?
答案 0 :(得分:0)
如果您还没有索引,我将创建以下索引:
create index ix1 on transactions ("hashBlock", id);
create index ix2 on blocks (n_time, id, hash);