La documentation MySQL explique bien le fonctionnement des index multi-colonnes ici .
En général, l'index peut être utilisé pour un where
clause quand un certain nombre de colonnes sur le le plus à gauche côté de l'indice ont des conditions d'égalité. Votre where
les clauses utilisent les colonnes suivantes :
- c1, c2
- c1, c2, c3, c4
- c1, c2
- c1, c2, c5
Tout index commençant par les colonnes c1
et c2
serait normalement utilisé pour ces requêtes. MySQL peut appliquer d'autres conditions à l'utilisation de l'index, telles que la sélectivité. Autrement dit, si c1
et c2
ont des valeurs constantes (par exemple), l'utilisation d'un index ne profitera pas à la requête.
Pour optimiser toutes ces combinaisons, vous pouvez créer deux index :c1, c2, c3, c4
et c2, c1, c5
. La raison de l'échange de c1
et c2
dans le deuxième index est donc vous pourriez gérer les requêtes où la condition est sur c2
mais pas c1
, ainsi que l'inverse.