首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么散列连接在PostgreSQL9.1中比较慢?

为什么散列连接在PostgreSQL9.1中比较慢?
EN

Server Fault用户
提问于 2013-04-24 10:17:01
回答 1查看 5.8K关注 0票数 0

我用PostgreSQL9.1将DB从Postgresql 8.4转移到新服务器。DB的大小是9.9GB,数据目录位于ssd 60 DB磁盘上。服务器有16 16内存和16个处理器核。

但是今天的平均负荷已经增长到70。

我发现查询在计划中使用散列连接,我的一个查询在16m中执行,但当我设置enable_hashjoin = off时,设置enable_mergejoin = off时,它变成了使用嵌套循环,并在12 my中执行。

为什么postgresql不使用最优查询计划?

解释我粘贴到http://explain.depesz.com/s/764 (使用enable_hashjoin = on) http://explain.depesz.com/s/weY (使用嵌套循环)的分析结果

EN

回答 1

Server Fault用户

发布于 2013-04-24 22:15:04

因为它认为这将是一个更快的计划。

cu表的连接非常复杂。它是如此复杂,以至于Postgres无法预测这个联接将返回多少行-当它实际上只返回4行时,它认为它将返回超过160万行。

尽量简化您的查询--不要在联接中使用coalescecase,也许可以将c.user_id=?c.expert_id=?分为2个查询,并将其union all。如果在rows x列中explain.depesz.com上有任何红细胞,那么查询的糟糕和良好的性能将是非常随机的。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/502198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档