Colunas usadas para filtragem ou participar (ou, em menor grau, classificação ) são de interesse para indexação. As colunas recém-selecionadas são pouco relevantes!Para a consulta a seguir, apenas índices em a e e pode ser útil:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Aqui, f e possivelmente c também são candidatos:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Depois de criar índices, teste para ver se eles são realmente úteis com
EXPLAIN ANALYZE
. Compare também os tempos de execução com e sem os índices. Excluir e recriar índices é rápido e fácil. Também há parâmetros para experiment
com EXPLAIN ANALYZE
. A diferença pode ser impressionante ou inexistente.Como suas tabelas são somente leitura, a manutenção do índice é barata. É apenas uma questão de espaço em disco.
Se você realmente quer saber o que está fazendo, comece lendo os documentos .
Se você não sabe quais consultas esperar...
-
Tente registrar consultas suficientes para encontrar casos de uso típicos. Consultas de log com o parâmetrolog_statement = all
por isso. Ou apenas registre consultas lentas usandolog_min_duration_statement
.
-
Crie índices que pode ser útil e verifique as estatísticas depois de algum tempo para ver o que realmente é usado. O PostgreSQL tem uma infraestrutura completa para estatísticas de monitoramento . Uma maneira conveniente de estudar estatísticas (e muitas outras tarefas) é pgAdmin onde você pode escolher sua tabela/função/índice e obter todos os dados na aba "estatísticas" no navegador de objetos (janela principal).
-
Proceda conforme descrito acima para ver se os índices em uso realmente aceleram as coisas.
-
Se o planejador de consultas optar por usar um ou mais de seus índices, mas sem nenhum efeito ou efeito adverso, provavelmente algo está errado com sua configuração e você precisará estudar noções básicas de otimização de desempenho:vácuo, análise, parâmetros de custo, uso de memória, ...