La règle générale pour les index est d'en coller un sur n'importe quel champ utilisé dans un WHERE
ou JOIN
clause.
Cela étant dit, il y a quelques optimisations que vous pouvez faire. Si vous SAVEZ qu'une certaine combinaison de champs est la seule qui sera jamais utilisée dans WHERE sur une table particulière, alors vous pouvez créer une clé multi-champ unique sur ces champs, par exemple
INDEX (field1, field2, field5)
contre
INDEX (field1),
INDEX (field2),
INDEX (field5)
Un index multi-champs peut être plus efficace dans de nombreux cas, par rapport à la nécessité de parcourir plusieurs index. L'inconvénient est que l'index multi-champs n'est utilisable que si les champs en question sont effectivement utilisés dans une clause WHERE.
Avec vos exemples de requêtes, depuis element
et field_id
sont dans les trois index, vous feriez peut-être mieux de les séparer dans leur propre index dédié. S'il s'agit de champs modifiables, il est préférable de conserver leur propre index dédié. par exemple. si jamais vous devez changer field_id
en vrac, la base de données doit mettre à jour 3 index différents, v.s. mettre à jour un seul dédié.
Mais tout se résume à une analyse comparative - testez votre configuration particulière avec différentes configurations d'index et voyez laquelle fonctionne le mieux. Les règles empiriques sont pratiques, mais ne fonctionnent pas 100 % du temps.