加快Sql查询

Posted

技术标签:

【中文标题】加快Sql查询【英文标题】:Speeding up Sql query 【发布时间】:2019-07-10 16:51:14 【问题描述】:

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

有什么办法可以加快第二次查询的速度?

【问题讨论】:

你的表定义是什么?定义了哪些索引?请显示 EXPLAIN (ANALYZE, BUFFERS) 您的查询的输出... 【参考方案1】:

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

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

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

【讨论】:

以上是关于加快Sql查询的主要内容,如果未能解决你的问题,请参考以下文章

如何加快sql查询?

如何加快包含 sql 查询的代码?

如何加快我在 sql 中的查询

加快oracle sql删除查询[重复]

如何加快sql子查询

我可以做些啥来加快这个 SQL 查询的速度?