# 72.2.多元统计实例

72.2.1. 函数依赖关系

72.2.2. 多元N-不同计数

72.2.3. MCV列表

# 72.2.1.函数依赖关系

多元相关性可以用一个非常简单的数据集来证明——一个有两列的表,两列都包含相同的值:

CREATE TABLE t (a INT, b INT);
INSERT INTO t SELECT i % 100, i % 100 FROM generate_series(1, 10000) s(i);
ANALYZE t;

如中所述第14.2节,计划者可以确定t使用从中获取的页数和行数pg_类:

SELECT relpages, reltuples FROM pg_class WHERE relname = 't';

 relpages | reltuples
### 72.2.2. Multivariate N-Distinct Counts

 A similar problem occurs with estimation of the cardinality of sets of multiple columns, such as the number of groups that would be generated by a `GROUP BY` clause. When `GROUP BY` lists a single column, the n-distinct estimate (which is visible as the estimated number of rows returned by the HashAggregate node) is very accurate:

解释(分析、计时)从t组中选择计数(*);查询计划

# 72.2.3.MCV列表

如中所述第72.2.1节,函数依赖是一种非常廉价且高效的统计类型,但其主要局限性在于其全局性(仅跟踪列级别的依赖,而不是单个列值之间的依赖)。

本节介绍MCV(最常见值)列表的多元变量,这是中描述的每列统计数据的直接扩展第72.1节。这些统计数据通过存储单个值来解决这一限制,但从构建统计数据的角度来看,它自然更昂贵分析,存储和计划时间。

让我们看看来自第72.2.1节同样,这一次是在同一组列上创建MCV列表(确保删除功能依赖项,以确保规划人员使用新创建的统计信息)。

DROP STATISTICS stts;
CREATE STATISTICS stts2 (mcv) ON a, b FROM t;
ANALYZE t;
EXPLAIN (ANALYZE, TIMING OFF) SELECT * FROM t WHERE a = 1 AND b = 1;
                                   QUERY PLAN