Postgresql – 使用enable_nestloop = false查询运行速度更快.为
当我使用默认的enable_nestloop = true和enable_nestloop = false(~10秒)运行它时,我的查询运行速度慢了很多(约5分钟).
解释两种情况的分析结果: 机器A nestloop = true – http://explain.depesz.com/s/nkj0(~5分钟) 在另一个稍慢的机器上,复制数据库并保留默认的enable_nestloop = true需要大约20秒. 机器B nestloop = true – (~20secs) 对于上述所有情况,我确保在运行查询之前进行了ANALYZE.没有其他查询并行运行. 两台机器都在运行Postgres 8.4.机器A运行Ubuntu 10.04 32位,而机器B运行Ubuntu 8.04 32位. 这里提供了实际查询.它是一个具有许多连接的报告查询,因为数据库主要用于事务处理. >如果不采用物化视图的方式,我可以做些什么来让规划师通过设置enable_nestloop = false来完成我所做的事情? 解决方法
如果查询计划程序选择次优查询计划,则可能会使用不完整或误导性信息.
有关服务器调整,请参阅此PostgreSQL Wiki page.特别要注意random_page_cost和default_statistics_target的章节. 更具体地说,它可能有助于增加以下列的统计目标: ALTER TABLE postgres.products ALTER COLUMN id SET STATISTICS 1000; ALTER TABLE postgres.sales_orders ALTER COLUMN retailer_id SET STATISTICS 1000; ALTER TABLE postgres.sales_orders ALTER COLUMN company_id SET STATISTICS 1000; ALTER TABLE goods_return_notes ALTER COLUMN retailer_id SET STATISTICS 1000; ALTER TABLE goods_return_notes ALTER COLUMN company_id SET STATISTICS 1000; ALTER TABLE retailer_category_leaf_nodes ALTER COLUMN tree_left SET STATISTICS 1000; ALTER TABLE channels ALTER COLUMN principal_id SET STATISTICS 1000; 这些涉及过滤器导致的
还有更多.检查刨床与估算偏差很大的每一列.默认值仅为100.仅对带有>>的表有意义1000行.试验设置.之后对表运行ANALYZE以使更改生效. 它也可能有助于在postgres上创建部分索引(sales_orders.retailer_id)WHERE retailer_id IS NOT NULL(取决于常见的NULL值). 可能对您有帮助的另一件事是升级到最新版本9.1.这方面已经取得了一些重大进展. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |