科技行者

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

知识库

知识库 安全导航

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

理解 DB2 中的列组统计信息

  • 扫一扫
    分享文章到微信

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

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

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

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件
  1. 上面的 update 语句列出了 SYSCAT.COLGROUPCOLS 视图的所有列,以及来自 SYSSTAT.COLGROUPS 的相关多列统计信息,它表示列集中不同组的数量。在这个示例中,以上的语句描述了列集(DEPTNUMB、DEPTNAME、MANAGER、 DIVISION 和 LOCATION)具有八个不同的组。

    org.ddl 文件也包含如下用于索引统计信息的语句:

    UPDATE SYSSTAT.INDEXES
    SET NLEAF=1,
        NLEVELS=1,
        FIRSTKEYCARD=8,
        FIRST2KEYCARD=8,
        FIRST3KEYCARD=8,
        FIRST4KEYCARD=-1,
        FULLKEYCARD=8,
        CLUSTERFACTOR=-1.000000,
        CLUSTERRATIO=100,
        SEQUENTIAL_PAGES=0,
        DENSITY=0,
        AVERAGE_SEQUENCE_GAP=0.000000,
        AVERAGE_SEQUENCE_FETCH_GAP=0.000000,
        AVERAGE_SEQUENCE_PAGES=0.000000,
        AVERAGE_SEQUENCE_FETCH_PAGES=0.000000,
        AVERAGE_RANDOM_PAGES=1.000000,
        AVERAGE_RANDOM_FETCH_PAGES=0.000000,
        NUMRIDS=8,
        NUMRIDS_DELETED=0,
        NUM_EMPTY_LEAFS=0
    WHERE INDNAME = 'IX1' AND INDSCHEMA = 'SKAPOOR'
          AND TABNAME = 'ORG' AND TABSCHEMA = 'SKAPOOR';
    

    以上的 update 语句描述了下列多列统计信息。FIRST2KEYCARD 统计信息描述了列(DEPTNUMB,DEPTNAME)中不同组的数量,FIRST3KEYCARD 和 FULLKEYCARD 描述了完整列集(DEPTNUMB,DEPTNAME,MANAGER)中不同组的数量。FIRST4KEYCARD 的值为 -1,这是因为索引在该键中只有 3 列。

选项 2. 查询目录表

可以从 DB2 目录表中查询与 DB2look 工具输出中所描述的相同的信息。

  1. 如果尚未创建索引,请按选项 1 中的步骤 1 创建索引,在多个表中收集多个列组统计信息:
    RUNSTATS ON TABLE <SCHEMA_NAME>.ORG ON ALL COLUMNS
             AND COLUMNS ((DEPTNUMB, DEPTNAME, MANAGER, DIVISION, LOCATION), 
             (DEPTNUMB, DEPTNAME), (MANAGER, DIVISION)) WITH DISTRIBUTION AND INDEXES ALL;
    
    RUNSTATS ON TABLE <SCHEMA_NAME>.EMPLOYEE ON ALL COLUMNS 
             AND COLUMNS ((EMPNO, WORKDEPT), (EMPNO, WORKDEPT, JOB));
    

  2. 查询目录表来检索列组统计信息。注意下面的查询是一个递归 SQL 语句,它会导致一个可以忽略的 SQL0347W 警告。可以使用 “UPDATE COMMAND OPTIONS USING W OFF” 选项阻止该警告出现。
    WITH TMP(ID, NUM) AS
    (
       SELECT COLGROUPID, MAX(ORIDNAL)
         FROM SYSCAT.COLGROUPCOLS
       GROUP BY COLGROUPID
    ),
    TMP2 (ID, NAME, NUM, TNAME, TSCHEMA) AS
    (
       SELECT ID, CAST(RTRIM(COLNAME) AS CHAR(128)), NUM, TABNAME, TABSCHEMA
         FROM TMP Y, SYSCAT.COLGROUPCOLS X
        WHERE X.COLGROUPID = Y.ID
          AND Y.NUM = X.ORIDNAL
      UNION ALL
       SELECT Y.ID, CAST(RTRIM(X.COLNAME) || ',' || Y.NAME AS CHAR(128)), Y.NUM-1,
       	 TNAME, TSCHEMA
         FROM TMP2 Y, SYSCAT.COLGROUPCOLS X
        WHERE Y.ID=X.COLGROUPID
          AND X.ORIDNAL=Y.NUM-1
          AND Y.NUM > 1
          AND TNAME = TABNAME
          AND TSCHEMA = TABSCHEMA
    )
    SELECT SUBSTR(TSCHEMA,1,10) TABSCHEMA, SUBSTR(TNAME,1,10) TABNAME, 
    	NAME COLS, COLGROUPCARD 
    FROM TMP2, SYSSTAT.COLGROUPS
    WHERE ID = COLGROUPID
    AND NUM = 1
    ORDER BY TABSCHEMA, TABNAME
    ;
    

    上面的查询返回如下记录:

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

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

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