首页/数据/数据库速查/key_len 解读(联合索引用了几列)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

key_len 解读(联合索引用了几列)

key_len 是实际使用的索引字节数:可反推联合索引用到第几列;计算与字符集相关(utf8mb4 每字符 4 字节,varchar 另计长度字节)。

数据库速查数据更新于 2026-10-12
utf8mb4 char(10)40 字节(NOT NULL)
utf8mb4 varchar(20)约 82 字节(4×20+2)
可空列再加 1 字节 null 标志
BIGINT8 字节;INT 4 字节

反推示例

反推示例
-- idx(user_id, status, created_at)
EXPLAIN SELECT * FROM appdb.orders
WHERE user_id = 1 AND status = 2;
-- key_len 只覆盖 user_id+status 的长度 => 第三列未参与索引定位
-- 若 key_len 等于三列总长,说明全用上(第三列可能用于范围/排序)
key_len 不反映用于排序还是查找;排序场景还要结合 Extra 是否 filesort。

易错点

  • 算错字符集:utf8mb3 与 utf8mb4 的 key_len 完全不同,对比截图前先确认库字符集
  • 把 key_len 大当好事:它只说明用了几列,不代表这几列选对了

数据来源与参考

  • MySQL 8.0 Reference Manual: EXPLAIN key_len

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌