您好,欢迎来到欧宁财经。
搜索
您的当前位置:首页PostgreSQL中列的statistics属性

PostgreSQL中列的statistics属性

来源:欧宁财经


PostgreSQL中列的statistics属性 这个属性大概来说是用来控制分析时对列的分析的详细程度,会影响到执行计划的选择,具体的描述可以看文档。pgsql默认所有列的statistics都是100,这是个相当保守的数字,即对列中不同值的分析是很粗糙的。在列值分布不均匀的


PostgreSQL中列的statistics属性

这个属性大概来说是用来控制分析时对列的分析的详细程度,会影响到执行计划的选择,具体的描述可以看文档。pgsql默认所有列的statistics都是100,这是个相当保守的数字,即对列中不同值的分析是很粗糙的。在列值分布不均匀的情况下,经常会看到执行计划用很粗略的平均值估算而选择了非最优的路径。 www.2cto.com

通过调高这个参数,很多执行计划不正确的问题可以得到解决。特别是一些经常用到的查询列,提高默认参数很有必要。我感觉,提高到1000很有必要。按照官方文档,提高这个参数唯一的坏处是analyze时间会长一点。从实际情况来看,从100提高到1000基本感觉不到analyze时间有多少差别。

怎样才能知道某一列的statistics需要提高呢?最方便的就是用explain analyze了。如果发现执行计划里某个步骤执行结果的估算值(row)和实际获得值(actual)相差很悬殊,那么就很有必要提高这个参数了。怎么提高呢?

alter table [table name] alter column [column name] set statistics=1000;

提高完了记得重新analyze一下表。

还有一个需要注意的地方,有的地方是索引里的列值估算不准确(具体看执行计划),这时候需要调整索引里的列的statistics,方法和调整表一样,把索引当成表:

alter table [index name] alter column [column name] set statistics=1000;

Copyright © 2019- onup.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务