# 72.2.多元统计实例
# 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