Criar estatísticas estendidas para colunas correlacionadas (CREATE STATISTICS)
PostgreSQLManutençãoComando
-- city and district are correlated: the planner assumes independence and underestimates rows
CREATE STATISTICS customer_city_district_stx (dependencies, ndistinct, mcv) ON city, district FROM customer;
ANALYZE customer;
-- Collected statistics
SELECT statistics_name, attnames, kinds, n_distinct, dependencies
FROM pg_stats_ext
WHERE tablename = 'customer';
-- Verify: estimated rows should now be close to actual rows
EXPLAIN (ANALYZE, TIMING OFF)
SELECT * FROM customer WHERE city = 'Ankara' AND district = 'Cankaya';O que faz
Ensina ao planner a correlação entre colunas (dependências funcionais, contagens de distintos combinadas, valores mais comuns conjuntos); corrige as estimativas de linhas para condições WHERE e GROUP BY com várias colunas.
Quando usar
Quando o EXPLAIN ANALYZE mostra linhas estimadas muito abaixo das reais em filtros com várias colunas (ex.: 12 vs. 570) e, por isso, é escolhido um método de join/índice errado.
Atenção
Só tem efeito após o ANALYZE. Quando o número de combinações de colunas é muito maior que o statistics target (padrão 100), a lista mcv não consegue cobrir a maioria delas, e então o mcv pode não corrigir uma estimativa que dependencies corrigiria. Verifique com EXPLAIN; se necessário retire mcv da definição ou aumente o target com ALTER STATISTICS customer_city_district_stx SET STATISTICS 1000;. dependencies só é usado em condições de igualdade/IN, ndistinct nas estimativas de GROUP BY. Toda definição alonga o ANALYZE; adicione-a apenas a grupos de colunas com erro de estimativa comprovado.