我正在关注如何在此页面中使用 postgresql 中的“创建统计信息”的示例。
CREATE TABLE tbl (
col1 int,
col2 int
);
INSERT INTO tbl SELECT i/10000, i/100000
FROM generate_series (1,10000000) s(i);
CREATE STATISTICS s1 (dependencies) on col1, col2 from tbl;
ANALYZE tbl;
SELECT stxname, stxkeys, stxdependencies
FROM pg_statistic_ext
WHERE stxname = 's1';
返回:
stxname,stxkeys,stxdependencies
s1,1 2,{"1 => 2": 1.000000}
但是,我对这条线感到困惑
看这个,我们可以看到 Postgres 意识到 col1 完全确定 col2,因此具有 1 的系数来捕获该信息。
在示例中,col2 中有许多重复的记录。那么 col1 是如何“完全确定”col2 的呢?这是什么意思?
这意味着如果
col1
两行相同,则col2
也将相同。换句话说,如果函数依赖是完美的,您可以
col2
从表中删除并使用映射col1
到col2
. 但不要忘记,这些只是来自行样本的统计数据,因此即使您在扩展统计信息中看到依赖关系为 1,也不能证明它确实总是如此(只是经常如此)。