原创: 管长龙 译 mysql
做者:Vadim Tkachenkosql
经过测试,比较 MySQL 5.7.25 和 MySQL 8.0.15 之间字符集和校验规则的设置所带来的性能差别。ionic
测试环境性能
系统 | Ubuntu 18.04 LTS (bionic)测试
内核 | 4.15.0-20-generic线程
处理器 | physical = 2, cores = 28, virtual = 56, hyperthreading = yes3d
型号 | 56xIntel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz<code
内存 | 376.6Gblog
我将用 sysbench 测试不一样数量的线程下 oltp_read_only 和 oltp_point_select 两种工做负载。排序
sysbench oltp_read_only --mysql-ssl=off --report-interval=1 --time=300 --threads=$i --tables=10 --table-size=10000000 --mysql-user=root run sysbench oltp_point_select --mysql-ssl=off --report-interval=1 --time=300 --threads=$i --tables=10 --table-size=10000000 --mysql-user=root ru
OLTP_READ_ONLY (latin1 字符集)的结果:
OLTP_POINT_SELECT(latin1 字符集)的结果:
咱们能够看到,在 OLTP_READ_ONLY 的工做负载中,MySQL 8.0.15 慢了 10%,而对于 OLTP_POINT_SELECT 的工做负载,MySQL 8.0.15 慢了 12-16%。
虽然差别不必定很大,但这足以说明 MySQL 8.0.15 在这组测试的各类工做负载中,性能不如 MySQL 5.7.25。
可是,若是咱们使用 utf8mb4 字符集而不是 latin1,结果的彷佛会改变。
由于 utf8mb4 如今是 MySQL 8.0 中的默认字符集,让咱们比较 MySQL 5.7.25 的 latin1 和 utf8mb4。
但在咱们这样作以前,让咱们来看看 COLLATION(校对字符集)。
MySQL 5.7.25 使用默认排序规则 utf8mb4_general_ci,可是,我读到要对东欧语言使用正确的排序和比较,您可能须要使用 utf8mb4_unicode_ci 排序规则。
因此让咱们比较每一个版本 latin1 和 utf8mb4(默认排序规则)。首先是 5.7:
因此在这里咱们能够看到 MySQL 5.7 中的 utf8mb4 实际上比 latin1 慢得多(55-60%)
对于 MySQL 8.0.15 也同样
对于 MySQL 8.0,utf8mb4 的命中率要低得多(高达11%)
如今让咱们比较 utf8mb4 的全部排序规则
对于 MySQL 5.7
若是你打算使用 utf8mb4_unicode_ci,你将得到更高的性能(与 utf8mb4_general_ci 相比)
对于 MySQL 8.0.15
如今让咱们在 utf8mb4 中使用默认排序规则比较 MySQL 8.0 和 MySQL 5.7:
在这种状况下,MySQL 8.0 实际上比 MySQL 5.7 好34%
结论
MySQL 5.7 在 latin1 字符集中赛过 MySQL 8.0
若是咱们使用 utf8mb4 字符集,MySQL 8.0 会大幅超越 MySQL 5.7
请注意,MySQL 8.0 如今默认为 utf8mb4 ,而 MySQL 5.7 默认为 latin1
当运行 MySQL 8.0 与 MySQL 5.7 之间的比较时,请注意您正在使用的字符集,由于它可能会影响比较不少。