Melhores Práticas de Manutenção de Índices
Índices são contratos que geram escritas. Mantenha-os com evidências de planos, estatísticas de uso e métricas de inchaço no PostgreSQL 18.4.
Como Usar Esta Lista
- Exija prova de
EXPLAINem PRs de índice. - Revise
idx_scantrimestralmente em tabelas com muitas escritas. - Emparelhe alterações de índice com
ANALYZEna mesma janela de alteração.
A - Portões de Design
- Mapeie o índice para uma forma de consulta específica no ticket. Sem índices especulativos.
- Prefira índices compostos a muitos índices de coluna única. Reduza a amplificação de escrita.
- Coloque colunas de igualdade antes de colunas de intervalo em compostos. Disciplina de prefixo esquerdo.
- Use índices parciais para predicados seletivos estáveis. Menores, mais rápidos, escritas mais baratas.
- Evite indexar booleanos de baixa cardinalidade sozinhos. A menos que o predicado parcial seja uma fatia pequena.
B - Operações
- Use
CREATE INDEX CONCURRENTLYem migrações de produção. Evite longos blocos de escrita. - Execute
ANALYZEapós a criação do índice em tabelas grandes. Verificação de adoção do planejador. - Monitore
pg_stat_user_indexes.idx_scanantes de descartar. Limpeza baseada em evidências. - REINDEX CONCURRENTLY quando o inchaço for comprovado, não apenas por agendamento. Reconstruções direcionadas.
- Acompanhe o crescimento do tamanho do índice versus o tamanho da tabela. Detecção precoce de inchaço.
C - Fluxo de Trabalho da Equipe
- Documente solicitações de índice rejeitadas com
EXPLAIN. Evite debates repetidos. - Audite prefixos redundantes após adições compostas. Descarte índices substituídos.
- Inclua
DROP CONCURRENTLYde reversão na migração. Caminho seguro de reversão. - Teste de carga de escritas após pacotes de índice. Meça o impacto do p95 de inserção.
- Alinhe com os padrões de revisão de consulta para texto SQL. SQL oculto por ORM ainda é revisado.
D - Anti-Padrões
- Não indexe cegamente todas as chaves estrangeiras se não forem usadas. Indexe junções filhas que você executa.
- Não duplique a restrição
UNIQUEcomINDEXsimples. Desordem no catálogo. - Não adicione GIN em JSONB sem consultas de contenção. Custo de manutenção enorme.
- Não corrija varreduras sequenciais com índices antes de
ANALYZE. Estatísticas primeiro. - Não deixe índices
INVALIDapós falha deCONCURRENTLY. Descarte e tente novamente.
FAQs
Quantos índices em uma tabela de fatos OLTP?
Frequentemente 3-6 comprovados; valide as escritas.idx_scan zero significa descartar?
Aguarde um ciclo de negócios completo, a menos que um duplicado seja comprovado.Disputas de ordem de colunas de índice?
Resolva com `EXPLAIN` nas consultas dominantes.Uso excessivo de INCLUDE?
Apenas colunas necessárias para varreduras apenas de índice.BRIN em fatos?
Tabelas de anexação de séries temporais; não OLTP geral.Conselheiros de ajuste de índice na nuvem?
Use como dicas; verifique com os planos.Deleções em cascata de FK?
Precisa de índice na coluna FK filha para velocidade.Índice particionado?
Indexe partições individualmente ou use índice particionado por versão do PG.Ferramenta de monitoramento?
pganalyze, dashboards personalizados em `idx_scan` e tamanho.Próximo?
Seção `Vacuum` para inchaço que afeta varreduras apenas de índice.Relacionados
- Noções Básicas de Design de Índice - Regras de design
- Índices Duplicados e Redundantes - Auditorias
- REINDEX & REINDEX CONCURRENTLY - Reconstruções
- Lidando com Solicitações de Índice - Processo da equipe
Versões do Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.