Estou seguindo o exemplo de como usar 'criar estatísticas' no postgresql desta página .
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';
retorna:
stxname,stxkeys,stxdependencies
s1,1 2,{"1 => 2": 1.000000}
No entanto, estou confuso com esta linha
Observando isso, podemos ver que o Postgres percebe que col1 determina totalmente col2 e, portanto, tem um coeficiente de 1 para capturar essa informação.
No exemplo há muitos registros em col2 que se repetem. Então, como col1 'determina totalmente' col2? O que isto significa?
Isso significa que se
col1
for idêntico para duas linhas, entãocol2
também será idêntico.Em outras palavras, se a dependência funcional fosse perfeita, você poderia remover
col2
da tabela e usar uma tabela de pesquisa que mapeiacol1
paracol2
. Mas não se esqueça de que esses são apenas dados estatísticos de uma amostra das linhas, portanto, mesmo que você veja uma dependência de 1 nas estatísticas estendidas, isso não é prova de que realmente é sempre assim (apenas com muita frequência).