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

Pourquoi les performances des requêtes MySQL sont-elles si mauvaises lors de l'utilisation d'un index CHAR/VARCHAR ?

De toute évidence, le problème est que la requête effectue une analyse d'index. L'approche alternative consisterait à effectuer deux recherches d'index, pour les première et dernière valeurs identiques, puis à utiliser les méta-informations dans l'index pour le calcul. D'après vos observations, MySQL fait les deux.

Le reste de cette réponse n'est que spéculation.

La raison pour laquelle les performances sont "seulement" 300 fois plus lentes, au lieu de 200 000 fois plus lentes, est due à la surcharge de lecture de l'index. En fait, la numérisation des entrées est assez rapide par rapport aux autres opérations nécessaires.

Il existe une différence fondamentale entre les nombres et les chaînes lorsqu'il s'agit de comparaisons. Le moteur peut simplement regarder les représentations binaires de deux nombres et reconnaître s'ils sont identiques ou différents. Malheureusement, pour les chaînes, vous devez tenir compte de l'encodage/du classement. Je pense que c'est pourquoi il doit examiner les valeurs.

Il est possible que si vous aviez 216 000 exemplaires de exactement la même chaîne, alors MySQL pourra faire le décompte en utilisant les métadonnées dans l'index. En d'autres termes, l'indexeur est suffisamment intelligent pour utiliser les métadonnées pour des comparaisons d'égalité exactes. Mais, il n'est pas assez intelligent pour prendre en compte l'encodage.