为什么COLCARDF Field在SYSIBM上.系统列在表空间上的运行统计之后等于 0?



i 使用 DB2 10.1 zos 当 Runstat 在表 ، COLCARDF ّfield of SYSIBM 上时。系统列 列之一 0 但在表上 SYSIBM。SYSINDEXES Fields FIRSTKEYCARDF 和 FULLKEYCARDF is true

我的 Runstat jcl 工作 :

RUNSTATS TABLESPACE dbname.tsname part n 表(全部( INDEX(schema.ixname( 报告编号 水平变化 全部更新 历史 全部

该表有超过 100 亿个数据点。 基数为零的列上还有一个复合索引和一个常规索引。

谢谢你的帮助.....

您的 runstats 作业显示 PART 关键字,该关键字指示它仅在分区级别收集统计信息。 SYSCOLUMNS 记录整个对象的信息,而不仅仅是单个分区的信息。 由于泛型列在多个分区中可能具有相同的值,因此无法在分区级别轻松确定 COLCARDF。 SYSINDEXES 与此类似,但对于分区索引,根据定义,每个键值只能存在于单个分区中。

您可能对 RUNSTATS 命令的 FORCEROLLUP 选项感兴趣,该选项向 DB2 指示是否强制聚合统计信息,即使某些分区未收集统计信息。

同样重要的是要注意,如果没有收集所有分区上的统计信息,聚合的统计信息可能会产生误导,因此 Db2 会为查询选择较差的访问路径。 当然,当 Db2 认为列基数 (COLCARDF( 为零时,也可能发生这种情况。

摘要:最好的办法是收集所有分区的统计信息(此时 FORCEROLLUP 无关紧要(,但如果在此期间需要聚合,RUNSTATS 的 FORCEROLLUP 选项将执行此操作。