增加 default_statistics_target 值可以使您的数据库更快,特别是在分析之后....
阅读这篇文章,我看到https://discuss.pivotal.io/hc/en-us/articles/201581033-default-statistics-target-Explained
(...)简而言之,此参数控制收集统计信息的方式,值 1 是估计/准确度最低的统计信息,值 1000 是最准确的统计信息,显然会花费时间/资源(CPU、内存等)/空间。通常默认值足以获得准确的计划,但如果您有一个复杂的数据分布/或查询中经常引用一个列,那么设置一个更高的值可能有助于获得更好的表统计信息,因此优化器执行的更好计划。
这是一个很好的解释,但例如,如果我设置 default_statistics_target= 1000 1000 的真正含义是什么?正在生成 1000 KB 的统计信息?或者可能是分析的 1000 行表?也许是 1000 列?或者每次分析可能需要 1000 秒...
所以我的问题是这个数字是如何真正影响分析或查询规划器的?显然,我知道 default_statistics_target = 1000 将获得比 100 更多的时间来运行分析,并且 1000 将产生更好的统计数据......
它将
300 * default_statistics_target
从每个表中采样行。它将使用该样本来确定default_statistics_target
要存储在该数组中的最常见值,以及default_statistics_target
要存储在该数组中的直方图边界。加上其他一些标量统计信息,例如不同值的数量。选择乘数 300 是因为一些统计理论表明,您需要对每个您希望计算的每个直方图界限进行采样,以使您的采样直方图界限具有可接受的不确定性水平。
最常见的值列表用于帮助规划器预测等式表达式的选择性,例如
where state='CA'
. 直方图边界用于帮助规划器预测不等式或范围表达式的选择性,例如where income between 55000 and 64000