update statistics high|medium 中有两个资源:数据分布和准确分辨率。
数据分布:
数据分布过程是对一列或多列中的实际数据抽样,然后编入一系列Informix所谓的箱子(bulket)中。对于抽样数据所用的箱子有一个固定的数目。箱子数目和每个箱子所包含的准确数据范围都取决于为准确分辨而输入的值。
查看命令:dbschema -d dbname -hd tabname
如下图表示有若干个箱子,其中第4个箱子中共有1000行(第一个1000表示),该箱子有1000个不同的数值(第二个1000表示),该箱子中最大的值4000。
在overflow部分有两列,第一列是该值在数据集中出现的次数;第二个列表示这个数值本身。
Distribution for informix.tab4.id Constructed on 2019-04-20 22:20:38.00000 High Mode, 0.500000 Resolution ( 1) 。。。。。 --- OVERFLOW --- 1: ( 200000, aaaaaaaaaaaaaaaaaaaa ) |
数据分辨率:update statistics 中的resolutions选项决定所产生的分布箱数目和箱中数据的准确范围。resolutions选项输入的值代表你希望每个箱子包含数据集的百分比。resolutions参数的范围是10~0.005,默认是0.05(意味着每个箱子中数据的条数=表中的总条数*0.5%)。换言之,如果resolutions的值变小,每个箱子中的记录条数就会变小,箱子的数量就会增加,优化器在使用他们的的时候会更高效。
统计更新模式:
在high模式下,分布式是在所有行都被读过,并且它们的值已排序之后才产生的。任何高度重复的值都被推出,并标记为溢出值,其他值则按照预期的分辨率而分入各分布箱。因此这些统计更新将非常准确。
在medium模式下,所有行都被读过,但随后用各行的随机样本来产生数据分布信息。
可以设置环境变量:export DBUPSPACE=5000;单位KB。该变量确定生成分布时扫描一遍数据所能使用的资源。这个变量确定引擎在产生分布时排序和链接所需的磁盘空间。
如果不输入resolutions的值,你可以取定一个cofidence值以约束该过程。cofidence值会影响用于产生分布的随机样本的大小,值的范围是0.8~0.95。这个值表示的是这个分布和用update statistics high产生的分布的相似程度。
举例:
update statistics medium for table tab_name(colname) resolutions 10 .80
统计更新的习惯性做法:
1、在一个索引或基于索引的约束的第一个列上使用high模式;
2、在任何作为连接列频繁使用的非“主”列和一个“=”条件左侧的列上使用high模式;
3、查询条件中不常用的其他各列用medium模式;
4、少于1000行的表用low;