Ich habe hier und da gelesen , dass die Verwendung der utf8_unicode_ci
Kollatierung eine bessere Behandlung von Unicode-Text gewährleistet (z. B., dass Zeichen wie "œ" beim Suchen und Ordnen in "oe" umgewandelt werden) als die Standardeinstellung, bei utf8_general_ci
der im Grunde nur diakritische Zeichen entfernt werden. Leider geben beide Quellen an, dass utf8_unicode_ci
etwas langsamer ist als utf8_general_ci
.
Meine Frage lautet also: Was bedeutet "etwas langsamer"? Hat jemand Benchmarks durchgeführt? Sprechen wir von einer Leistungsbeeinträchtigung von -0,01% oder eher von -25%?
Danke für Ihre Hilfe.
Antworten:
Nun, ich habe im Internet keine Benchmarks gefunden, also habe ich beschlossen, selbst Benchmarks zu erstellen.
Ich habe eine sehr einfache Tabelle mit 500000 Zeilen erstellt:
Dann habe ich es mit zufälligen Daten gefüllt, indem ich diese gespeicherte Prozedur ausgeführt habe:
Dann habe ich die folgenden gespeicherten Prozeduren erstellt, um einfaches SELECT, SELECT mit LIKE und Sortieren (SELECT mit ORDER BY) zu vergleichen:
In den obigen gespeicherten Prozeduren wird die Kollatierung utf8_general_ci verwendet, aber natürlich habe ich während der Tests sowohl utf8_general_ci als auch utf8_unicode_ci verwendet.
Ich habe jede gespeicherte Prozedur fünfmal für jede Kollatierung aufgerufen (fünfmal für utf8_general_ci und fünfmal für utf8_unicode_ci) und dann die Durchschnittswerte berechnet.
Hier sind die Ergebnisse:
benchmark_simple_select () mit utf8_general_ci: 9957 ms
benchmark_simple_select () mit utf8_unicode_ci: 10271 ms
In diesem Benchmark ist die Verwendung von utf8_unicode_ci um 3,2% langsamer als utf8_general_ci.
benchmark_select_like () mit utf8_general_ci: 11441 ms
benchmark_select_like () mit utf8_unicode_ci: 12811 ms
In diesem Benchmark ist die Verwendung von utf8_unicode_ci um 12% langsamer als utf8_general_ci.
benchmark_order_by () mit utf8_general_ci: 11944 ms
benchmark_order_by () mit utf8_unicode_ci: 12887 ms
In diesem Benchmark ist die Verwendung von utf8_unicode_ci um 7,9% langsamer als utf8_general_ci.
quelle
Ich habe keine Benchmark gesehen, aber Sie können Ihre eigene Benchmark mit der BENCHMARK- Funktion ausführen :
BENCHMARK (Anzahl, Ausdruck)
Wie von Matthew empfohlen, können Sie eine parallele Installation von MYSQL ausführen. Beachten Sie jedoch, dass es einen großen Unterschied zwischen verschiedenen Architekturen geben kann (sparc, intel, 32bit, 64bit, ...).
quelle