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.