MySQL 中的 key_len 為什么會大于索引列的長度?

MySQL 中的 key_len 為什么會大于索引列的長度?

mysql:關于 key_len 計算方式的解析

問題描述:

在 MySQL 8.0.18 中,創建了一個表 student,其中包含一個 char(20) 的列 student_name,并建立了索引 student_name_index。向表中插入了三條數據。

通過使用 EXPLaiN 查看執行計劃,發現最終使用的索引的 key_len 為 80。然而,表中只有三條記錄,key_len 應該為20 * 3 = 60,為何出現這種情況?

答案解析:

char(20) 定義了一個定長字符類型,可以存儲長度不超過 20 個字節的字符串。而 utf8mb4 是一種編碼方式,它允許使用不同的字節數來表示不同的字符。對于 utf8mb4 編碼,一個字符最多可以占 4 個字節。

因此,對于 student_name 列,其長度為 20 個字符,但由于使用的是 utf8mb4 編碼,每個字符實際占用 4 個字節,所以 key_len 實際上為 20 * 4 = 80。

與表中記錄的數量無關,key_len 始終是索引列實際占用的字節數。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享