J'ai lu ici et là que l'utilisation du utf8_unicode_ci
classement garantit un meilleur traitement du texte unicode (par exemple, il sait comment développer des caractères tels que `` œ '' en `` oe '' pour la recherche et la commande) par rapport à la valeur par défaut utf8_general_ci
qui, essentiellement, supprime simplement les signes diacritiques. Malheureusement, les deux sources indiquent que utf8_unicode_ci
c'est légèrement plus lent que utf8_general_ci
.
Ma question est donc la suivante: que signifie «légèrement plus lent»? Quelqu'un a-t-il exécuté des repères? Parlons-nous d'un impact sur les performances de -0,01% ou plutôt de quelque chose comme -25%?
Merci de votre aide.
Réponses:
Eh bien, je n'ai trouvé aucun repère sur Internet, j'ai donc décidé de le faire moi-même.
J'ai créé un tableau très simple avec 500000 lignes:
Ensuite, je l'ai rempli de données aléatoires en exécutant cette procédure stockée:
Ensuite, j'ai créé les procédures stockées suivantes pour comparer les sélections simples SELECT, SELECT avec LIKE et le tri (SELECT avec ORDER BY):
Dans les procédures stockées ci-dessus, le classement utf8_general_ci est utilisé, mais bien sûr, pendant les tests, j'ai utilisé à la fois utf8_general_ci et utf8_unicode_ci.
J'ai appelé chaque procédure stockée 5 fois pour chaque classement (5 fois pour utf8_general_ci et 5 fois pour utf8_unicode_ci), puis calculé les valeurs moyennes.
Voici les résultats:
benchmark_simple_select () avec utf8_general_ci: 9957 ms
benchmark_simple_select () avec utf8_unicode_ci: 10271 ms
Dans ce cas-test, utf8_unicode_ci est plus lent que utf8_general_ci de 3,2%.
benchmark_select_like () avec utf8_general_ci: 11441 ms
benchmark_select_like () avec utf8_unicode_ci: 12811 ms
Dans ce cas-test, utf8_unicode_ci est plus lent que utf8_general_ci de 12%.
benchmark_order_by () avec utf8_general_ci: 11944 ms
benchmark_order_by () avec utf8_unicode_ci: 12887 ms
Dans ce cas-test, utf8_unicode_ci est plus lent que utf8_general_ci de 7,9%.
la source
Je n'ai vu aucun benchmark, mais vous pouvez exécuter le vôtre en utilisant la fonction BENCHMARK :
BENCHMARK (count, expr)
Comme conseillé par Matthew, vous pouvez exécuter une installation parallèle de MYSQL, mais considérez qu'il pourrait y avoir une énorme différence entre différentes architectures (sparc, intel, 32bit, 64bit, ...).
la source