原創: 管長龍 譯 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 之間的比較時,請注意您正在使用的字符集,由於它可能會影響比較不少。