PostgreSQL中列的statistics属性
PostgreSQL中列的statistics属性
这个属性大概来说是用来控制分析时对列的分析的详细程度,会影响到执行计划的选择,具体的描述可以看文档。pgsql默认所有列的statistics都是100,这是个相当保守的数字,即对列中不同值的分析是很粗糙的。在列值分布不均匀的情况下,经常会看到执行计划用很粗略的平均值估算而选择了非最优的路径。 www.zzzyk.com
通过调高这个参数,很多执行计划不正确的问题可以得到解决。特别是一些经常用到的查询列,提高默认参数很有必要。我感觉,提高到1000很有必要。按照官方文档,提高这个参数唯一的坏处是易做图yze时间会长一点。从实际情况来看,从100提高到1000基本感觉不到易做图yze时间有多少差别。
怎样才能知道某一列的statistics需要提高呢?最方便的就是用explain 易做图yze了。如果发现执行计划里某个步骤执行结果的估算值(row)和实际获得值(actual)相差很悬殊,那么就很有必要提高这个参数了。怎么提高呢?
alter table [table name] alter column [column name] set statistics=1000;
提高完了记得重新易做图yze一下表。
还有一个需要注意的地方,有的地方是索引里的列值估算不准确(具体看执行计划),这时候需要调整索引里的列的statistics,方法和调整表一样,把索引当成表:
alter table [index name] alter column [column name] set statistics=1000;