加快Sql查询

时间:2019-07-10 16:51:14

标签: sql postgresql

我有一个包含约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开始。

有什么方法可以加快第二个查询的速度吗?

1 个答案:

答案 0 :(得分:0)

如果您还没有索引,我将创建以下索引:

create index ix1 on transactions ("hashBlock", id);

create index ix2 on blocks (n_time, id, hash);