Existe uma maneira de descobrir a melhor maneira de saber quais índices criar para uma tabela?
WHERE
cláusulas.
Existe uma maneira de descobrir a melhor maneira de saber quais índices criar para uma tabela?
WHERE
cláusulas.
Respostas:
Regras curtas. (Alguns deles são criados automaticamente, mas podem ser eliminados manualmente mais tarde, dependendo dos dbms. Não pense que você sempre trabalhará no PostgreSQL.)
Cada chave primária significa que as chaves primárias de várias colunas devem ter um único índice cobrindo todas as colunas. O PostgreSQL criará esse índice automaticamente se você declarar uma chave primária de várias colunas.
Existem muitos casos em que um único índice de várias colunas oferece um desempenho melhor do que vários índices de uma única coluna. Monitore consultas lentas e faça testes para descobrir qual é qual.
Suponha que qualquer alteração na indexação melhore algumas atividades do banco de dados e prejudique outras. Acho útil ter um conjunto de instruções SQL que eu possa criar um perfil antes e depois de fazer alterações nos índices. Este conjunto inclui instruções SELECT, INSERT, UPDATE e DELETE.
Não há substituto para estudar os documentos para seus dbms específicos.
Além do que o @Catcall já forneceu , e para adicionar um pequeno corretivo:
Também cobri alguns princípios básicos nesta resposta intimamente relacionada ao SO recentemente .
As respostas até agora parecem indicar que você precisa criar índices nas chaves primárias, mas esse não é o caso no PostgreSQL (exceções parciais se aplicam). Cito o manual aqui :
O PostgreSQL cria automaticamente um índice exclusivo quando uma restrição exclusiva ou chave primária é definida para uma tabela. O índice abrange as colunas que compõem a chave primária ou restrição exclusiva (um índice de várias colunas , se apropriado) e é o mecanismo que impõe a restrição.
Negrito ênfase minha.
Você pode criar índices adicionais para a segunda ou mais colunas de um índice de várias colunas, mas a primeira geralmente é coberta por um índice de várias colunas - exceto quando colunas adicionais tornam o índice muito maior. Discutimos isso em detalhes na questão relacionada:
Um índice composto também é bom para consultas no primeiro campo?
Índices de várias colunas , índices parciais e índices de expressões são ferramentas particularmente poderosas no PostgreSQL. Desde o PostgreSQL 9.2, também existem varreduras apenas de índice , o equivalente a "cobertura de índices" em outros RDBMS. Esse não é outro tipo de índice, mas um novo recurso do RDBMS com os tipos de índice existentes.
Todo índice carrega custos específicos ; portanto, não há como contornar algum conhecimento básico para realmente otimizar a indexação. Apenas criar mais índices pode fazer mais mal do que bem. Em particular, os índices podem impedir que as atualizações HOT melhorem o desempenho.
Geralmente, as operações de gravação ( DELETE
, UPDATE
) ficam mais caras (mas também podem se beneficiar!), Enquanto as operações de leitura ( SELECT
) geralmente se beneficiam. Muitos índices podem esgotar a memória cache, de modo que até as operações de leitura podem sofrer.
Finalmente, esta página do Postgres Wiki sobre manutenção de índice apresenta ferramentas para encontrar índices duplicados ou não utilizados (entre outras coisas).
Existem duas opções.
A resposta para você mesmo é bastante exaustivamente documentada aqui. Então, vamos olhar para outra coisa.
O Pghero pode ajudá-lo se você quiser alguns conselhos automatizados.
Dito isto, há algumas deficiências.
WHERE
e ORDER BY
, não JOINS
.Confira este vídeo para mais informações .