在 postgres 函数依赖统计的上下文中,“完全确定”是什么意思?

Tha*_*Guy 1 postgresql

我正在遵循此页面中如何在 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 呢?这是什么意思?

Lau*_*lbe 5

这意味着如果col1两行相同,那么col2也将相同。

换句话说,如果函数依赖性是完美的,您可以col2从表中删除并使用映射col1到的查找表col2。但不要忘记,这些只是来自行样本的统计数据,因此即使您在扩展统计信息中看到依赖项为 1,也不能证明它确实总是如此(只是非常频繁)。