Czytałem tu i ówdzie, że użycie utf8_unicode_ci
sortowania zapewnia lepsze przetwarzanie tekstu w Unicode (na przykład, jak rozszerzyć znaki takie jak „œ” na „oe” w celu wyszukiwania i porządkowania) w porównaniu do domyślnego, utf8_general_ci
który w zasadzie po prostu usuwa znaki diakrytyczne. Niestety oba źródła wskazują, że utf8_unicode_ci
jest nieco wolniejszy niż utf8_general_ci
.
Moje pytanie brzmi: co oznacza „nieco wolniej”? Czy ktoś przeprowadził testy porównawcze? Czy mówimy o wpływie na wydajność wynoszącym -0,01%, czy raczej na poziomie -25%?
Dzięki za pomoc.
Odpowiedzi:
Cóż, nie znalazłem żadnych testów porównawczych w Internecie, więc sam postanowiłem je przeprowadzić.
Stworzyłem bardzo prostą tabelę z 500000 wierszami:
Następnie wypełniłem je losowymi danymi, uruchamiając tę procedurę składowaną:
Następnie utworzyłem następujące procedury składowane, aby porównać proste WYBIERZ, WYBIERZ JAK PODOBNY i sortuj (WYBIERZ przy ORDER BY):
W powyższych procedurach przechowywanych stosuje się zestawienie utf8_general_ci, ale oczywiście podczas testów użyłem zarówno utf8_general_ci, jak i utf8_unicode_ci.
Każdą procedurę przechowywaną wywołałem 5 razy dla każdego zestawienia (5 razy dla utf8_general_ci i 5 razy dla utf8_unicode_ci), a następnie obliczyłem wartości średnie.
Oto wyniki:
benchmark_simple_select () z utf8_general_ci: 9957 ms
benchmark_simple_select () z utf8_unicode_ci: 10271 ms
W tym teście użycie utf8_unicode_ci jest wolniejsze niż utf8_general_ci o 3,2%.
benchmark_select_like () z utf8_general_ci: 11441 ms
benchmark_select_like () z utf8_unicode_ci: 12811 ms
W tym teście użycie utf8_unicode_ci jest wolniejsze niż utf8_general_ci o 12%.
benchmark_order_by () z utf8_general_ci: 11944 ms
benchmark_order_by () z utf8_unicode_ci: 12887 ms
W tym teście użycie utf8_unicode_ci jest wolniejsze niż utf8_general_ci o 7,9%.
źródło
Nie widziałem żadnego testu porównawczego, ale możesz uruchomić swój własny za pomocą funkcji BENCHMARK :
BENCHMARK (liczba, wyrażenie)
Zgodnie z zaleceniami Matthew możesz uruchomić równoległą instalację MYSQL, ale weź pod uwagę, że może istnieć ogromna różnica między różnymi architekturami (sparc, intel, 32bit, 64bit, ...).
źródło