gpt4 book ai didi

postgresql - Postgres 慢位图堆扫描

转载 作者:行者123 更新时间:2023-11-29 11:52:04 25 4
gpt4 key购买 nike

我有大约 600 万行的表 messages phones。而且这个查询性能很差

SELECT t1.id, t2.number, t1.name, t1.gender
FROM messages t1
INNER JOIN phones t2 ON t2.id = t1.parent_id
INNER JOIN regions t6 ON t6.id = t1.region_id
WHERE t2.number IS NOT NULL AND t1.entity AND NOT t2.type AND t1.region_id = 50
ORDER BY t1.id LIMIT 100

EXPLAIN ANALYZE 结果:http://explain.depesz.com/s/Pd6D

Btree 在 where 条件下对所有列进行索引。所有 id 列上的主键,parent_idregion_id 上的 messages 表中的外键。所有 table 上的真空也运行了。

但是仅仅 100 行超过 15 秒就太慢了。怎么了?

Postgres 9.3,ubuntu 13.10,cpu 2x 2.5Ghz,4gb 内存,pg 配置 http://pastebin.com/mPVH1YJi

最佳答案

这完全取决于您的读取与写入负载,但一种解决方案可能是为最常见/一般情况创建复合索引。

例如,BTREE(parent_id, region_id) 将堆扫描转换为索引扫描将是巨大的。由于您有动态查询,因此其他查询可能需要一些其他复合索引组合,但我建议您现在只在复合索引中使用两列(因为每个查询都不同)。注意BTREE(parent_id, region_id)在只需要parent_id的时候也可以扫描,所以也不需要携带BTREE(parent_id)索引。

关于postgresql - Postgres 慢位图堆扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066623/

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