科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道理解 DB2 中的列组统计信息

理解 DB2 中的列组统计信息

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

DB2 SQL 优化器(后文简称为优化器)可以估计每个备选访问计划的执行成本,并根据其估计结果选择一个最佳访问计划。一个访问计划可以指定用来解析一条 SQL 语句的操作次序。

来源:IT专家网 2008年6月3日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
  1. 对 STAFF 表的 ID、DEPT 列和 ORG 表的 MANAGER、DEPTNUMB 列做了连接,所以要在这两组列中收集列组统计信息:
    RUNSTATS ON TABLE <SCHEMA_NAME>.STAFF ON ALL COLUMNS AND COLUMNS ((ID, DEPT));
    RUNSTATS ON TABLE <SCHEMA_NAME>.ORG ON ALL COLUMNS AND COLUMNS ((MANAGER, DEPTNUMB));

    DB2 优化器使用收集到的列组统计信息正确地估计了基数:
               8
             TBSCAN 
             (   2) 
             33.5658 
                2 
               |
               8
             SORT   
             (   3) 
             33.4243 
                2 
               |
               8      
             HSJOIN 
             (   4) 
             33.0363 
                2 
          /-----+-----\
       35                8 
     TBSCAN           TBSCAN 
     (   5)           (   6) 
     17.2334          15.3736 
        1                1 
       |                |
       35                8 
 TABLE: SKAPOOR  TABLE: SKAPOOR 
      STAFF             ORG


示例 5:查看多列统计信息

优化器利用两种类型的多列统计信息:索引 keycard 统计信息和列组统计信息。这个示例提供了查看表中可用多列统计信息的步骤。

选项 1. 使用 db2look 工具

db2look 工具用来生成 DDL 语句,从而重新创建数据库中定义的对象。可以使用 -m 选项来显示为这些对象收集的统计信息。

  1. 在 ORG 表中收集列组统计信息和索引统计信息:
    CREATE INDEX IX1 ON ORG (DEPTNUMB, DEPTNAME, MANAGER);
    
    RUNSTATS ON TABLE <SCHEMA_NAME>.ORG ON ALL COLUMNS
             AND COLUMNS ((DEPTNUMB, DEPTNAME, MANAGER, DIVISION, LOCATION))
             WITH DISTRIBUTION AND INDEXES ALL;
    

  2. 使用 db2look 工具查看 ORG 表的统计信息:
    db2look -d sample -e -a -m -t ORG -o org.ddl
    

    注意:使用 -h 选项查看关于 DB2look 工具的信息。

  3. 在 org.ddl 文件中查看输出。它应该包含如下用于列组统计信息的 UPDATE 语句:
    UPDATE SYSSTAT.COLGROUPS SET colgroupcard = 8
            WHERE colgroupid IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' AND tabname = 'ORG'
                  AND colname = 'DEPTNUMB' AND oridnal = 1)
            AND colgroupid IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' AND tabname = 'ORG'
                  AND colname = 'DEPTNAME' AND oridnal = 2)
            AND colgroupid IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' AND tabname = 'ORG'
                  AND colname = 'MANAGER' AND oridnal = 3)
            AND colgroupid IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' AND tabname = 'ORG'
                  AND colname = 'DIVISION' AND oridnal = 4)
            AND colgroupid IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' AND tabname = 'ORG'
                  AND colname = 'LOCATION' AND oridnal = 5)
            AND colgroupid NOT IN (SELECT colgroupid
            FROM SYSCAT.COLGROUPCOLS
            WHERE tabschema = 'SKAPOOR ' 
                  AND tabname = 'ORG' AND oridnal = 6) ;

    注意:在 V8 FixPak 13 中,列组统计信息添加到了 db2look 工具中。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章