UPDATE STATISTICS

说明

更新统计信息

语法

update_statistics ::=

参数

statistics_name

要更新的统计的名称。统计名必须符合标识符规则并且是一个合法有效的名称。

table

该统计基于的表名。

SCAN BY DEFAULT

指定按缺省的方式读取表中的行以更新统计信息。

SCAN BY FULL

指定应读取表中的所有行以更新统计信息。

SCAN BY PERCENT value

按指定比例的方法读取表中的行以更新统计信息。value是指定的比例,必须介于1到100之间。

SCAN BY MINVALUE value

按指定的最小数目对表中的行进行采样以更新统计信息。value是采样的最小数目,可以是从0到n的总行数。

注解

对于一个已经建立的统计,可以随时计算更新统计值,尤其是当统计基于的表和列的信息已经发生了大量的插入、修改和删除操作以后。

在更新统计中,依然可以指定统计采样的方式,这与create statistics中是不矛盾的,当执行更新统计信息时,不指定任何采样方式情况下,系统会利用在create statistics中指定的采样方式作为缺省的采样方式。而如果update statistics语句中指定了采样方式,则系统将采用指定的采样方式来计算更新统计信息。

示例

示例1: 更新统计信息(以 CREATE STATISTICS 中指定的方式)

--  清理环境
DROP STATISTICS stat1 ON tab1;
DROP TABLE tab1 CASCADE;

--  创建表并插入数据
CREATE TABLE tab1(a INT, b INT);

INSERT INTO tab1 VALUES(1, 1);
INSERT INTO tab1 VALUES(2, 221);
INSERT INTO tab1 VALUES(3, 223);


--  建立一个基于按比例采样方式的统计
--  系统将会自动抽取 tab1 表 a 列中 25% 的元组来进行采样
CREATE STATISTICS stat1 ON tab1(a) SCAN BY PERCENT 25;


--  更新统计信息(以 CREATE STATISTICS 中指定的方式)
UPDATE STATISTICS stat1 ON tab1;


--  删除统计和表
DROP STATISTICS stat1 ON tab1;
DROP TABLE tab1;

示例2: 更新统计信息(以全扫描方式)

--  清理环境
DROP STATISTICS stat2 ON tab2;
DROP TABLE tab2 CASCADE;

--  创建表并插入数据
CREATE TABLE tab2(a INT, b INT);

INSERT INTO tab2 VALUES(1, 1);
INSERT INTO tab2 VALUES(2, 221);
INSERT INTO tab2 VALUES(3, 223);


--  对 tab2 表中的 a 列建立一个基于全扫描的统计
CREATE STATISTICS stat2 ON tab2(a) SCAN BY FULL;


--  更新统计信息(以全扫描方式)
UPDATE STATISTICS stat2 ON tab2 SCAN BY FULL;


--  删除统计和表
DROP STATISTICS stat2 ON tab2;
DROP TABLE tab2;