首页/数据/SQL 速查/key_len 判断复合索引用了几列
性能与执行计划72 条

key_len 判断复合索引用了几列

key_len 是索引查找实际用到的字节数:对照列定义宽度可以推断复合索引命中前几列,验证前缀使用情况。

SQL 速查数据更新于 2026-10-12

示例

示例
ALTER TABLE orders
  ADD INDEX idx_user_status_created (user_id, status, created_at);

EXPLAIN SELECT * FROM orders
WHERE user_id = 100 AND status = 'paid';
-- key: idx_user_status_created
-- key_len 对应前两列的字节数:第 3 列 created_at 未参与索引查找
常见宽度INT 4 字节、BIGINT 8、DATE 3、DATETIME 5(不含小数秒)、utf8mb4 字符列按 4 字节/字符
可空列再加 1 字节 NULL 标志位
VARCHAR另加 1-2 字节长度前缀(按列声明的字节上限决定)
用 key_len 反推“实际用了复合索引前几列”,是验证前缀规则的直接手段。

易错点

  • 按 utf8mb4 每字符 3 字节估算:字符集实际按 4 字节/字符占用,算错会得出错误结论
  • 把 key_len 小于整索引当成索引失效:只用到前导列属于正常行为,关键看后续过滤是否能下推

数据来源与参考

  • MySQL 8.0 Reference Manual §8.8.2 EXPLAIN Output Format(key_len)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌