utf est vraiment utfmb3 et peut utiliser 3 octets maximum par caractère tandis que utfmb4 peut utiliser 4 octets par caractère. Pour les colonnes VARCHAR, cela ne fait normalement pas beaucoup de différence puisque MySQL ne stockera que le nombre d'octets nécessaires (sauf si vous avez créé vos tables MyISAM avec ROW_FORMAT=FIXED).
Cependant, lors de l'exécution de la requête, MySQL peut créer des tables temporaires dans le moteur de stockage MEMORY qui ne prend pas en charge les lignes de longueur variable. Ces tables temporaires ont une taille maximale, et si cette taille est dépassée, les tables temporaires seront converties en tables dans MyISAM/InnoDB (selon votre version de MySQL). La variable d'état Created_tmp_disk_tables
sera incrémenté à chaque fois que cela se produit. Si c'est le cas, essayez de voir si cela aide à augmenter la valeur de max_heap_table_size
et tmp_table_size
.
Vous pouvez également effectuer une mise à niveau vers MySQL 8.0, où un nouveau moteur de stockage prenant en charge les lignes de longueur variable est utilisé pour les tables temporaires internes.