我正在遵循此页面中如何在 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';
Run Code Online (Sandbox Code Playgroud)
返回:
stxname,stxkeys,stxdependencies
s1,1 2,{"1 => 2": 1.000000}
Run Code Online (Sandbox Code Playgroud)
然而,我对这条线感到困惑
观察这个,我们可以看到 Postgres 意识到 col1 完全决定 col2,因此有一个系数 1 来捕获该信息。
在示例中,col2 中有许多重复的记录。那么 col1 如何“完全确定”col2 呢?这是什么意思?
这意味着如果col1
两行相同,那么col2
也将相同。
换句话说,如果函数依赖性是完美的,您可以col2
从表中删除并使用映射col1
到的查找表col2
。但不要忘记,这些只是来自行样本的统计数据,因此即使您在扩展统计信息中看到依赖项为 1,也不能证明它确实总是如此(只是非常频繁)。
归档时间: |
|
查看次数: |
87 次 |
最近记录: |