科技行者

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

知识库

知识库 安全导航

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

理解 DB2 中的列组统计信息

  • 扫一扫
    分享文章到微信

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

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

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

关键字: IBM 数据库 DB2

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

将使用 RUNSTATS 命令的 “ON COLUMNS” 选项收集列组统计信息。例如,使用 SHOW_LISTINGS 表收集 SHOW_LISTINGS.SHOW_ID、SHOW_LISTINGS.CHANNEL_ID 和 SHOW_LISTINGS.STATION_ID 中的列组统计信息,执行如下 RUNSTATS 命令:

                RUNSTATS ON TABLE schema_name.SHOW_LISTINGS ON COLUMNS ((SHOW_ID, CHANNEL_ID, 
	STATION_ID))

如果只在 DAY 列收集列统计信息以及收集 SHOW_ID、CHANNEL_ID、STATION_ID 和 TIME 列的列组统计信息,则执行以下的 RUNSTATS 命令:

                RUNSTATS ON TABLE schema_name.SHOW_LISTINGS ON COLUMNS ((SHOW_ID, CHANNEL_ID, 
	STATION_ID, TIME), DAY)       

注意:列统计信息是在列组中列出的所有列上收集的。在上面的命令中,列统计信息同样是在每一个列中收集的(SHOW_ID、CHANNEL_ID、STATION_ID 和 TIME)。

为了收集所有列的统计信息以及在 SHOW_ID、CHANNEL_ID、STATION_ID 和 TIME 中收集列组统计信息,执行下面的 RUNSTATS 命令:

                RUNSTATS ON TABLE schema_name.SHOW_LISTINGS ON ALL COLUMNS AND ON COLUMNS 
	((SHOW_ID, CHANNEL_ID, STATION_ID, TIME))      

要收集多个多列统计信息,可以提供一个组集。下面的 RUNSTATS 命令在组(SHOW_ID、CHANNEL_ID 和 STATION_ID)和组(SHOW_ID、CHANNEL_ID、STATION_ID 和 TIME)中收集多列统计信息,同样也在 DAY 列上收集了列统计信息:

                RUNSTATS ON TABLE schema_name.SHOW_LISTINGS ON COLUMNS ((SHOW_ID, 
	CHANNEL_ID, STATION_ID), (SHOW_ID, CHANNEL_ID, STATION_ID, TIME), DAY)        

注意:对于索引统计信息来说,将为索引键的前两个列、前三列和前四列收集多个多列统计信息,而一个列组基数统计信息是为指定的各列组收集的。

确定何时收集列组统计信息

确定何时收集列组统计信息以及要收集哪些列组统计信息是比较困难的。这一节将为您介绍一些方法,帮助您确定何时需要列组统计信息。

本节的示例使用了 SAMPLE 数据库,可以通过执行 “db2sampl” 创建,此数据库使用 db2level:

示例 3:本地等式谓词

创建了 SAMPLE 数据库后,并没有在表上收集统计信息。首先,需要在 EMPLOYEE 表中收集统计信息:

RUNSTATS ON TABLE SCHEMA_NAME.EMPLOYEE WITH DISTRIBUTION;
考虑 SAMPLE 数据库中 EMPLOYEE 表上的如下查询:

SELECT EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SEX, JOB, SALARY
FROM EMPLOYEE
WHERE JOB='ANALYST';
该查询从 EMPLOYEE 表返回两条记录:

EMPNO  FIRSTNME     LASTNAME        WORKDEPT SEX JOB      SALARY     
------ ------------ --------------- -------- --- -------- -----------
000130 DOLORES      QUINTANA        C01      F   ANALYST     23800.00
000140 HEATHER      NICHOLLS        C01      F   ANALYST     28420.00

 2 record(s) selected.
看一下为此查询选择的查询执行计划。

为此,使用 EXPLAIN 工具,它要求 EXPLAIN 表存在。

  1. 为了创建 EXPLAIN 表,执行以下代码:
  2. 创建了 EXPLAIN 表之后,像下面这样对查询进行 EXPLAIN 处理:
    SET CURRENT EXPLAIN MODE EXPLAIN;
    
    SELECT EMPNO, FIRSTNME, LASTNAME, WORKDEPT, SEX, JOB, SALARY
    FROM EMPLOYEE
    WHERE JOB='ANALYST';
    
    SET CURRENT EXPLAIN MODE NO;

    使用 db2exfmt 工具查看查询执行计划:
    db2exfmt -d <DBNAME> -1 -g -o <FILENAME>
    

  3. 使用您喜爱的文本编辑器,您应看到像下面这样的查询执行计划:
            2 
         TBSCAN 
         (   2) 
         30.8464 
            2 
           |
           32 
     TABLE: SKAPOOR 
        EMPLOYEE

    基数估计值 2 符合实际结果。

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

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

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