在 MySQL 的 EXPLAIN 执行计划中,key_len
表示 MySQL 实际使用的索引部分的字节长度。这个值有时会大于索引列的定义长度,主要有以下几个原因:
NULL 标记占用空间
字符集的编码方式
多列索引的复合效应
索引列的数据类型
假设有一个复合索引 (col1, col2, col3): - col1: INT NOT NULL (4字节) - col2: VARCHAR(10) UTF8 NULL (最大 30+1=31字节) - col3: TINYINT NULL (1+1=2字节)
如果查询使用了全部三列,key_len 将是 4 + 31 + 2 = 37 字节
可以通过以下方式验证 key_len 的计算:
EXPLAIN SELECT * FROM table WHERE [使用索引的条件];
然后对比 key_len 值与你的预期,考虑上述因素进行调整。
希望这个解释能帮助您理解为什么 key_len 有时会大于索引列的定义长度。