理解 DB2 中的列组统计信息
在示例 3 和 4 中,优化器使用了索引统计信息,而没有使用列组统计信息,通过说明统计信息相关性来修正基数估计值。
尝试以下步骤:
- 创建如下索引:
IXEMP_1 ON EMPLOYEE(JOB, WORKDEPT, SEX); IXSTAFF_1 ON STAFF(ID, DEPT); IXORG_1 ON ORG(MANAGER, DEPTNUMB); - 对这些索引收集统计信息,但不收集任何列组统计信息:
RUNSTATS ON TABLE <SCHEMA_NAME>.EMPLOYEE AND INDEXES ALL; RUNSTATS ON TABLE <SCHEMA_NAME>.STAFF AND DETAILED INDEXES ALL; RUNSTATS ON TABLE <SCHEMA_NAME>.ORG AND INDEXES ALL; - 对示例 3 和 4 中的查询进行 EXPLAIN 处理。所得到的基数估计值符合上面的查询执行计划;然而,由于可用索引的不同,实际的计划会有所不同。注意收集的 DETAILED 统计信息并不影响基数估计值。
- 丢弃步骤 1 中创建的 IXEMP_1 和 IXSTAFF_1 索引,创建两个新的索引:
IXEMP_1 ON EMPLOYEE(JOB, WORKDEPT, SEX, EMPNO); IXSTAFF_1 ON STAFF(ID, DEPT,NAME,JOB); - 重复步骤 2 和步骤 3。其最后的基数估计值是相同的。
0
相关文章