Como determinar o custo / benefício da adição de um índice?

10

De acordo com Craig Ringer :

Embora seja geralmente uma boa ideia criar um índice (ou incluindo) nas colunas de chave estrangeira do lado da referência, isso não é necessário. Cada índice de adicionar retarda Operações DML ligeiramente para baixo, de modo que você paga um custo de desempenho em cada INSERT, UPDATEou DELETE. Se o índice for raramente usado, pode não valer a pena.

Como você determina se o benefício de adicionar um índice ultrapassa seu custo?

Você analisa os testes de unidade antes / depois de adicionar um índice e verifica se há um ganho geral de desempenho? Ou há uma maneira melhor?

Gili
fonte
pg_stat_user_indexesajuda a guiá-lo com isso, mostrando informações sobre o uso do índice. Para estimar os custos de manutenção, você pode observar a atividade de gravação da tabela, pg_stat_user_tablesmas devido ao HOT, nem todas as atualizações precisam necessariamente tocar no índice, para que você possa superestimar um pouco.
Craig Ringer
@ CraigRinger, isso é muito útil. Obrigado!
Gili
Eu confio no pgBadger quase exclusivamente. E meu intestino.
Colin 'Hart

Respostas:

4

O uso do índice depende da estrutura dos seus dados e da seletividade dos seus dados. Se você fizer consultas que não as utiliza, elas são caras. Se você usá-los efetivamente, eles são uma ótima ferramenta. Há um planejador de consultas e análises de planejador de consultas ( EXPLAIN) apenas de planejamento ou planejamento e execução de comandos ( EXPLAIN ANALYZE).

E há um ótimo livro on-line: use o índice luke sobre o uso recomendado de índices

Mladen Uzelac
fonte
4
A regra geral é boa, mas geral demais neste caso. Estou procurando uma ferramenta / medida concreta que sugira adicionar / remover índices com base no comportamento real do tempo de execução do meu aplicativo.
Gili
Talvez esta é a ferramenta que você está procurando: enterprisedb.com/products-services-training/products/...
Mladen Uzelac
1

Escolha regras práticas e siga-as. Por exemplo, eu sempre crio um índice no lado de referência de uma chave estrangeira.

Teste seu desempenho com base em critérios de desempenho com base nas necessidades do usuário. Por exemplo, o sistema precisa lidar com uma carga recebida de 100 tipos de solicitação POST X por minuto.

Se você não puder atender aos seus requisitos de desempenho, refine seu modelo, possivelmente quebrando suas regras práticas nesse processo.

Ritmo
fonte