分类: DB2/Informix
2008-05-31 18:26:50
增强的统计信息维护
要制定优秀的查询计划,优化器需要获得有关索引和数据分布的信息。当创建新的表或索引时,systemtable 没有提供可用的分布信息。要获得这些信息,必须运行 UPDATE STATISTICS
。UPDATE STATISTICS
创建并更新分布信息,并使用优化查询所需的信息更新系统编目表。它还重新优化存储过程,并在升级服务器时对索引进行转换。
您可以针对整个数据库、单个表、单个列或一个过程运行 UPDATE STATISTICS
。
UPDATE STATISTICS
有三种运行模式:
UPDATE STATISTICS LOW
创建查询优化所需的最少信息。它将更新 systable 中的表、行和页面数信息,以及 sysindex 和 syscolumn 中的索引和列信息。并不创建分布信息。如果已经存在分布信息,则这些信息不会被重写。要删除现有的分布信息,可使用 DROP DISTRIBUTIONS
。
UPDATE STATISTICS MEDIUM
创建与 low 模式相同的信息,以及一些保存在系统编目的 sysdistrib 表中的分布消息。分布信息的计算通过对一定比例的数据行进行取样完成。
UPDATE STATISTICS HIGH
除创建与 low 模式相同的信息外,还将计算 sysdistrib 每行中保存的分布消息。因此,high 模式计算出的分布信息非常准确。因而其执行速度也远远慢于 low 或 medium 模式。
关键字 RESOLUTION
能够使您调整分布 bin 的大小。在 medium 模式中,您还可以使用 RESOLUTION
指定更低的抽样大小界限并调整置信度。
使用关键字 DISTRIBUTIONS ONLY
,您可以避免计算索引信息。而只计算分布信息,这将加快执行 UPDATE STATISTICS
语句的速度。
关键字 SAMPLING SIZE
是 Version 11 中的新特性,使您能够在 UPDATE STATISTICS MEDIUM
中配置抽样大小。SAMPLING SIZE
的值保存在 sysdistrib.smlsize 中。进行抽样的实际行数保存在 sysdistrib.rowssmpld 列中。
UPDATE STATISTICS MEDIUM FOR TABLE customer SAMPLING SIZE |
抽样值 | 说明 |
---|---|
number <= 1 | 表示抽样行数所占的百分比。也就是说,0.6 表示对 60% 的行进行抽样来计算分布消息。 |
number > 1 | 表示将进行抽样的行的绝对数量。也就是说,数字 10 表示将对表中的 10 行数据进行抽样来计算分布信息。 |
从 Version 11 开始,CREATE INDEX
可以自动调用 UPDATE STATISTICS
。这样做的好处是,预先为优化器提供所需的分布信息。在 Version 11 之前,要为优化器创建所需的信息,必须在每次创建新索引之后调用 UPDATE STATISTICS
。
对于临时表,不需要使用 UPDATE STATISTICS LOW
。每次访问临时表时,将自动更新数据字典中的条目。和普通表一样,在为临时表创建索引时将自动生成统计信息。
使用 SET EXPLAIN
选项可以显示优化器的查询计划,以及预计返回的行数量和查询的相对成本。
SET EXPLAIN ON
将启用这个特性并将查询计划写入到名为 sqexplain.out 的文件中。从 Version 11 开始,您将能够指定应该将输出写入到哪个文件中。您可以使用关键字 FILE TO
设定文件的导向。
SET EXPLAIN ON ; SET EXPLAIN FILE TO |
使用 AVOID EXECUTE
关键字,您无需执行查询便可计算查询计划,从而节省时间。
SET EXPLAIN ON AVOID EXECUTE; |
SET EXPLAIN OFF
为默认设置,用来关闭这个特性。