CREATE STATISTICS

创建统计信息-定义扩展统计信息

Synopsis

CREATE STATISTICS [ IF NOT EXISTS ] statistics_name
    [ ( statistics_kind [, ... ] ) ]
    ON column_name, column_name [, ...]
    FROM table_name

Description

CREATE STATISTICS将创建一个新的扩展统计对象,用于跟踪有关指定表,外部表或实例化视图的数据。统计信息对象将在当前数据库中创建,并由发出命令的用户拥有。

如果指定了架构名称(例如CREATE STATISTICS myschema.mystat ...),那么将在指定的架构中创建统计信息对象。否则,它将在当前架构中创建。统计对象的名称必须与同一架构中任何其他统计对象的名称不同。

Parameters

Notes

您必须是表的所有者才能创建读取该表的统计信息对象。但是,一旦创建,统计对象的所有权就独立于基础表。

Examples

创建具有两个功能相关列的表t1,即了解第一列中的值足以确定另一列中的值。然后,在这些列上构建功能依赖性统计信息:

CREATE TABLE t1 (
    a   int,
    b   int
);

INSERT INTO t1 SELECT i/100, i/500
                 FROM generate_series(1,1000000) s(i);

ANALYZE t1;

-- the number of matching rows will be drastically underestimated:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);

CREATE STATISTICS s1 (dependencies) ON a, b FROM t1;

ANALYZE t1;

-- now the row count estimate is more accurate:
EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);

如果没有功能相关性统计信息,则计划者将假定两个WHERE条件是独立的,并将它们的选择性相乘在一起,得出的行数估计值太小。有了这样的统计信息,计划者就会意识到WHERE条件是多余的,并且不会低估行数。

Compatibility

SQL 标准中没有CREATE STATISTICS命令。

See Also

ALTER STATISTICS, DROP STATISTICS

上一章 首页 下一章