Rumah >pangkalan data >tutorial mysql >PostgreSQL中列的statistics属性

PostgreSQL中列的statistics属性

WBOY
WBOYasal
2016-06-07 14:53:411566semak imbas

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;

 

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:事物的隔离级别isolationArtikel seterusnya:MongoDB结构划分