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 始終是索引列實際占用的字節數。