Benchmarking
Scripts
-- Warning up
|
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
|
DO BENCHMARK(10000000,strcmp('xxxx','xxxx'));
|
|
-- Benchmarking
|
SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
DO BENCHMARK(10000000,strcmp('เก1','เก2'));
|
DO BENCHMARK(10000000,strcmp('โข1','โข2'));
|
DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
|
-- Warning up
|
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
|
DO BENCHMARK(10000000,strcmp('xxxx','xxxx'));
|
|
-- Benchmarking
|
SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
|
DO BENCHMARK(10000000,strcmp('dž','dž'));
|
DO BENCHMARK(10000000,strcmp('Dž','Dž'));
|
DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
|
DO BENCHMARK(10000000,strcmp('lj','lj'));
|
DO BENCHMARK(10000000,strcmp('Lj','Lj'));
|
DO BENCHMARK(10000000,strcmp('LJ','LJ'));
|
DO BENCHMARK(10000000,strcmp('nj','nj'));
|
DO BENCHMARK(10000000,strcmp('Nj','Nj'));
|
DO BENCHMARK(10000000,strcmp('NJ','NJ'));
|
Old (before the patch)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
Query OK, 0 rows affected (0.001 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
|
Query OK, 0 rows affected (0.432 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
|
Query OK, 0 rows affected (0.884 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
|
Query OK, 0 rows affected (15.566 sec)
|
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
|
Query OK, 0 rows affected (0.001 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
|
Query OK, 0 rows affected (0.366 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
|
Query OK, 0 rows affected (0.425 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
|
Query OK, 0 rows affected (0.472 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
|
Query OK, 0 rows affected (0.509 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
|
Query OK, 0 rows affected (0.561 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
|
Query OK, 0 rows affected (0.622 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
|
Query OK, 0 rows affected (0.673 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
|
Query OK, 0 rows affected (0.727 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
|
Query OK, 0 rows affected (0.786 sec)
|
New (after the patch)
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
|
Query OK, 0 rows affected (0.001 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('เก1','เก2'));
|
Query OK, 0 rows affected (0.531 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('โข1','โข2'));
|
Query OK, 0 rows affected (0.530 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('ไฮ1','ไฮ2'));
|
Query OK, 0 rows affected (0.531 sec)
|
MariaDB [test]> SET NAMES utf8mb4 COLLATE utf8mb4_croatian_ci;
|
Query OK, 0 rows affected (0.001 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('dž','dž'));
|
Query OK, 0 rows affected (0.503 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Dž','Dž'));
|
Query OK, 0 rows affected (0.507 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('DŽ','DŽ'));
|
Query OK, 0 rows affected (0.501 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('lj','lj'));
|
Query OK, 0 rows affected (0.154 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Lj','Lj'));
|
Query OK, 0 rows affected (0.155 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('LJ','LJ'));
|
Query OK, 0 rows affected (0.152 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('nj','nj'));
|
Query OK, 0 rows affected (0.152 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('Nj','Nj'));
|
Query OK, 0 rows affected (0.153 sec)
|
|
MariaDB [test]> DO BENCHMARK(10000000,strcmp('NJ','NJ'));
|
Query OK, 0 rows affected (0.151 sec)
|
Summary
utf8mb4_thai_520_w2
Ord A B Old time New Time % New/Old
|
--- --- --- -------- -------- ---------
|
0 เก1 เก2 0.432 0.531 122
|
7 โข1 โข2 0.884 0.530 59
|
229 ไฮ1 ไฮ2 15.566 0.531 3
|
utf8mb4_croatian_ci
Ord A B Old time New time % New/Old
|
--- --- --- -------- -------- ---------
|
0 dž dž 0.366 0.503 137
|
1 Dž Dž 0.425 0.507 119
|
2 DŽ DŽ 0.472 0.501 106
|
3 lj lj 0.509 0.154 30
|
4 Lj Lj 0.561 0.155 27
|
5 LJ LJ 0.622 0.152 24
|
6 nj nj 0.673 0.152 22
|
7 Nj Nj 0.727 0.153 21
|
8 NJ NJ 0.786 0.151 19
|
Observation:
- After the change, the contraction search time does not depend on the contraction ordinal position in the tailoring (it only depends on "ASCII or not ASCII")
- Searching for the very last (but one) contraction in utf8mb4_thai_520_w2 now takes 3% of the old search time (30 times faster!)
- Searching for the very last contraction in utf8mb4_croatian_ci now takes 19% of the old search time (5 times faster)
|