mariadb 8.0 引入了 optimizer trace 性能分析工具,可以通過它查看 mysql 的執行計劃。在使用 explain 查詢執行計劃時,我們可能會發現 key_len 的值與預期不符。本文將探討 mysql 中 key_len 的計算方式,并解決僅有 3 條記錄時 key_len 為 80 的問題。
key_len 的含義
key_len 表示索引鍵的長度。對于字符類型,key_len 為每個字符的字節數乘以索引鍵的長度。
utf8mb4 編碼
問題中的 student_name 列使用 utf8mb4 字符集,該字符集使用不同數量的字節來表示不同字符。漢字字符需要 3 個字節,而英文字母僅需要 1 個字節。
key_len 計算
對于問題中的例子,student_name 列的長度為 20 個字符,而一個 utf8mb4 字符為 4 個字節,因此 key_len 為:
key_len = 20 * 4 = 80
登錄后復制
雖然只有 3 條記錄,但 key_len 不受記錄數的影響。這是因為索引鍵的長度是固定的,并且與存儲的數據無關。
因此,在這種情況下,key_len 為 80 是因為 utf8mb4 編碼使用 4 個字節表示每個字符,而索引鍵的長度為 20 個字符。