技术开发 频道

理解 DB2 中的列组统计信息

在示例 3 和 4 中,优化器使用了索引统计信息,而没有使用列组统计信息,通过说明统计信息相关性来修正基数估计值。

尝试以下步骤:

  1. 创建如下索引:
    IXEMP_1 ON EMPLOYEE(JOB, WORKDEPT, SEX);
                    IXSTAFF_1 ON STAFF(ID, DEPT);
                    IXORG_1 ON ORG(MANAGER, DEPTNUMB);
                    

  2. 对这些索引收集统计信息,但不收集任何列组统计信息:
    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. 对示例 3 和 4 中的查询进行 EXPLAIN 处理。所得到的基数估计值符合上面的查询执行计划;然而,由于可用索引的不同,实际的计划会有所不同。注意收集的 DETAILED 统计信息并不影响基数估计值。
  4. 丢弃步骤 1 中创建的 IXEMP_1 和 IXSTAFF_1 索引,创建两个新的索引:
    IXEMP_1 ON EMPLOYEE(JOB, WORKDEPT, SEX, EMPNO);
                    IXSTAFF_1 ON STAFF(ID, DEPT,NAME,JOB);
                    

  5. 重复步骤 2 和步骤 3。其最后的基数估计值是相同的。
0
相关文章