key_len 里的 131 是怎么算出来的
utf8mb4 的 VARCHAR(32)、允许 NULL,在 EXPLAIN 的 key_len 里是 131:
32 × 4 = 128 utf8mb4 一个字符最多 4 字节,按列定义的上限算
+ 2 长度前缀:VARCHAR 有长有短,索引键里记下实际多少字节,比较时才知道在哪结束
+ 1 NULL 标记:这列允许 NULL
= 131允许 NULL 的 INT 没有长度前缀,是 4 + 1 = 5。所以 (name, age) 两列都用上时 key_len 是 136。
key_len 表示「定位这段扫描用掉的索引前缀」,只用来过滤的列不算。不想心算,可以直接看列名:
EXPLAIN FORMAT=JSON SELECT ...;
-- "used_key_parts": ["name", "age"]新版本 MySQL 的 JSON 格式默认是第 2 版,没有这个字段,要先 SET explain_json_format_version = 1。