A regra geral para índices é colocar um em qualquer campo usado em um
WHERE
ou JOIN
cláusula. Dito isto, existem algumas otimizações que você pode fazer. Se você SABE que uma certa combinação de campos é a única que será usada em WHERE em uma tabela específica, então você pode criar uma única chave de vários campos apenas nesses campos, por exemplo
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Um índice de vários campos pode ser mais eficiente em muitos casos, em vez de varrer vários índices. A desvantagem é que o índice de vários campos só pode ser usado se os campos em questão forem realmente usados em uma cláusula WHERE.
Com suas consultas de exemplo, desde
element
e field_id
estão em todos os três índices, talvez seja melhor dividi-los em seu próprio índice dedicado. Se esses campos forem alteráveis, é melhor mantê-los em seu próprio índice dedicado. por exemplo. se você precisar alterar field_id
em massa, o banco de dados precisa atualizar 3 índices diferentes, v.s. atualizando apenas um dedicado. Mas tudo se resume a benchmarking - teste sua configuração específica com várias configurações de índice e veja qual tem melhor desempenho. Regras práticas são úteis, mas não funcionam 100% do tempo.