Mysql
 sql >> Base de données >  >> RDS >> Mysql

Existe-t-il une méthode optimale pour commander un index composite MySQL ?

En règle générale, dans un index multi-colonnes, vous voulez que les colonnes qui ont la cardinalité la plus élevée, ou en d'autres termes, le plus grand nombre de valeurs distinctes, arrivent en premier dans l'index.

Pour être plus précis, vous voulez d'abord la colonne avec le moins de correspondances possibles avec vos critères de recherche afin que vous puissiez affiner le résultat défini autant que possible, mais en général, c'est la même chose que la cardinalité la plus élevée.

Ainsi, dans votre exemple, vous voudrez que la colonne qui aura des millions de valeurs distinctes soit dans l'index avant celle avec seulement 6 valeurs distinctes.

En supposant que vous ne sélectionniez qu'une seule ligne parmi des millions de valeurs, cela vous permet d'éliminer plus de lignes plus rapidement.

Lorsque vous considérez deux colonnes de cardinalité similaire, placez la plus petite en premier (INTEGER colonnes avant VARCHAR colonnes) car MySQL peut les comparer et les itérer plus rapidement.

Une mise en garde est que si vous sélectionnez avec des plages (par exemple, WHERE datecol > NOW() ), alors vous voulez les colonnes de plage les plus à droite, et vos colonnes avec une seule constante (par exemple. WHERE id = 1 ) À gauche. En effet, votre index ne peut être utilisé que pour rechercher et classer jusqu'au point de la première valeur de plage.