On this page
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
IF NOT EXISTS
- 如果已经存在具有相同名称的统计对象,则不要引发错误。在这种情况下发出通知。请注意,此处仅考虑统计对象的名称,而不考虑其定义的详细信息。
statistics_name
- 要创建的统计对象的名称(可选的模式限定)。
statistics_kind
- 要在此统计信息对象中计算的统计信息种类。当前支持的种类是
ndistinct
和dependencies
,ndistinct
启用 n-distinct 统计信息,dependencies
启用功能依赖性统计信息。如果省略此子句,则统计对象中将包括所有受支持的统计种类。有关更多信息,请参见Section 14.2.2和Section 68.2。
- 要在此统计信息对象中计算的统计信息种类。当前支持的种类是
column_name
- 计算的统计信息涵盖的表列的名称。至少必须提供两个列名。
table_name
- 包含要计算统计信息的列的表的名称(可选,由模式限定)。
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
命令。