优化器使用来自数据库的目录表来获取关于数据库、数据库中的数据量以及其他特征的信息,并使用此信息来选择访问数据的最佳方式。
如果当前统计信息不可用,那么优化器可以根据不准确的缺省统计信息来选择一个低效的访问方案。
强烈建议您使用 RUNSTATS 命令来收集关于表和索引的当前统计信息,特别当自上次执行 RUNSTATS 命令以来已经发生了重大的更新活动或已创建了新索引时。这会给优化器提供最准确的信息来确定最佳的访问方案。
一定要在更新表之后使用 RUNSTATS;否则优化器可能会认为该表是空的。若在运算符详细信息窗口上的基数等于零,那么此问题很明显。在此情况下,完成表的更新,重新运行 RUNSTATS 命令并重新创建受影响的表的说明快照。
注意:- 对可以通过查询访问的所有表和索引使用 RUNSTATS。
- 分位数和高频值统计信息确定数据何时分布不均匀。要更新这些值,可使用带有 WITH DISTRIBUTION 子句的 RUNSTATS 对表进行操作。
- 除了统计信息之外,还有其他因素(如限定行的排序、表大小以及缓冲池大小)可能会影响如何选择访问方案。
- 在运行 RUNSTATS 命令或更改配置参数之后,必须重新绑定应用程序(并可选择性地重新说明它们的语句)。
runstats(可在 CLP 提示符处输入)可以提供不同的统计信息级别,如下列语法中所示:
- 表:
- RUNSTATS ON TABLE 表名
- 索引:
- RUNSTATS ON TABLE 表名 FOR INDEXES ALL
- 表和索引:
- RUNSTATS ON TABLE 表名 AND INDEXES ALL
- 表:
- RUNSTATS ON TABLE 表名 WITH DISTRIBUTION
- 索引:
- RUNSTATS ON TABLE 表名 FOR DETAILED INDEXES ALL
- 表和索引:
- RUNSTATS ON TABLE 表名 WITH DISTRIBUTION AND DETAILED INDEXES ALL