VCF 生成器 Lite v5.0.2 发布:批量导入通讯录,优化加载流程修复多项问题
2026/4/16 18:31:11
这个问题在阿里等大厂面试中很常见,正确答案是:InnoDB 存储引擎(MySQL 默认引擎)的一个表最多支持 64 个二级索引(secondary indexes),加上主键索引(primary key),总索引数可达 65 个。
| 项目 | 限制值 | 说明 |
|---|---|---|
| 二级索引(secondary indexes)数量 | 64 个 | InnoDB 表的最大二级索引数(不包括主键)。超过会报错。 |
| 总索引数 | 65 个(64 二级 + 1 主键) | 主键是聚簇索引,不计入二级索引限制。 |
| 每个索引的列数 | 16 列 | 复合索引最多 16 列,超过报错:Too many key parts specified; max 16 parts allowed。 |
| 索引键长度 | 3072 字节(DYNAMIC/COMPRESSED 格式) 767 字节(REDUNDANT/COMPACT 格式) | utf8mb4 下 VARCHAR 前缀常限 191 字符(767/4)。 |
| 所有引擎最小保证 | 16 个索引 | MyISAM 等也类似,但 InnoDB 是主流。 |
“InnoDB 引擎下,一个表最多支持64 个二级索引(官方文档限制),加上主键总共 65 个。
但实际项目中,单表索引不建议超过 5-8 个,因为索引维护成本高,会严重影响 DML 性能。阿里手册也推荐控制在 5 个以内。
另外,每个复合索引最多 16 列,这可能是很多人误以为表最多 16 个索引的原因。”
甩出这个答案,面试官绝对点头~如果他追问“为什么不是无限个?”,可以答:InnoDB 内部结构限制(页面大小、键管理等),防止索引爆炸影响性能。
如果你在阿里/大厂面过类似题,欢迎分享细节!下一个问题可能是“索引太多怎么优化?”😂