加快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查询的主要内容,如果未能解决你的问题,请参考以下文章