Hello! 欢迎来到小浪云!


MySQL 中的 key_len 为什么会大于索引列的长度?


avatar
小浪云 2024-11-09 43

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 始终是索引列实际占用的字节数。

相关阅读