Vous devez comprendre que dans MySQL (dans le cas d'InnoDB), il n'utilise que le préfixe le plus à gauche de vos index. Donc, si l'index est dans Field1 + Field2, interroger avec uniquement Field2 dans WHERE ne peut pas utiliser l'intégralité de l'index.
Et si Field1 + Field2 + Field3
est l'index, une requête avec seulement Field1 & Field3
dans OÙ la même chose se produirait.
Option 1
Vous devrez créer un index distinct pour chaque scénario de recherche si vous souhaitez optimiser chaque recherche. Cependant, si les tables sont volumineuses, les index deviendraient également extrêmement volumineux. Si ces requêtes de recherche sont effectuées très souvent, cela en vaudrait la peine.
Option 2
Vous pouvez utiliser une astuce astucieuse si vos recherches ont une faible sélectivité (c'est-à-dire le sexe) en plaçant les colonnes de faible sélectivité tout à fait à gauche et en utilisant Gender IN(M, F)
pour l'inclure dans WHERE clause avec les autres colonnes pour utiliser l'intégralité de l'index.