技术开发 频道

理解 DB2 中的列组统计信息

优化器考虑使用所有可用的索引 keycard 统计信息。如果具有统计相关性的谓词所引用的列集中,索引 keycard 统计信息不可用,可以使用 RUNSTATS 命令收集列组统计信息。下面是从 DB2 V82 提取的语法。

注意:对于 DB2 9,请在 Info Center 的 DB2 9 文档中查看语法。.

			>>-RUNSTATS--ON TABLE--table name--+-USE PROFILE------------+--->
            '-| Statistics Options |-'
            Statistics Options:
            .-ALLOW WRITE ACCESS-.
            |--+--------------------------+--+--------------------+--------->
            '-| Table Object Options |-'  '-ALLOW READ ACCESS--'
            Table Object Options:
            |--+-FOR--| Index Clause |----------------------------------+---|
            '-+-------------------------+--+-----------------------+-'
            '-| Column Stats Clause |-'  '-AND--| Index Clause |-'
            Column Stats Clause:
            |--+-ON--| Cols Clause |------------------------------+---------|
            '-+---------------------+--| Distribution Clause |-'
            '-ON--| Cols Clause |-'
            On Cols Clause:
            .-ON ALL COLUMNS-------------------------------------------------.
            |                                           .-,-------------.    |
            |                                           V               |    |
            |--+-ON--+----------------------+--COLUMNS--(----Column Option-+--)-+--|
            |     '-+-ALL-+--COLUMNS AND-'                                      |
            |       '-KEY-'                                                  |
            '-ON KEY COLUMNS-------------------------------------------------'
            

“ON COLUMNS” 子句允许您指定一个列的列表,为它们收集统计信息。如果您指定了一组列,则会收集该组中惟一值的数量。未列出的列的统计信息非常明确。您可以在 “on-cols-clause” 和 “on-dist-cols-clause” 中使用这个子句。

注意:目前还不支持为一组列收集分布统计信息。

注意:如果启用了 automatic runstats 并使用 RUNSTATS 命令收集了列组统计信息,automatic runstats 将覆盖这些统计信息,并丢弃列组统计信息。

AUTO_RUNSTATS 数据库配置设置表明是否启用了 automatic runstats:

Automatic runstats (AUTO_RUNSTATS)=ON
            

如果设置为 “ON”,则启用 automatic runstats。

AUTO_RUNSTATS 默认情况下使用 “具有所有分布和示例的详细索引” 的 RUNSTATS 选项。

您可以使用统计信息配置文件来覆盖默认的 RUNSTATS 选项。您可以将希望收集的任意列组统计信息添加到此配置文件中,以避免 automatic runstats 覆盖它们。

“统计信息配置文件” 提供了关于统计信息配置文件的详细资料。

对于数据库分区特性(database partitioning feature,DPF)环境,automatic runstats 总是在目录分区上收集统计信息。如果表不存在于这个目录节点上,将使用表驻留的节点组的第一个分区。

将使用 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)
            

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

0
相关文章