2026-01-16 19:58:49
MySQL索引设计规范的核心在于平衡查询性能与写入效率,避免因不当索引导致性能下降。以下是关键规范及解释:
1. 主键设计原则避免修改聚集索引:主键作为B+树的聚集索引,修改会导致大量数据移动。推荐使用与业务无关的自增整型ID(如INT AUTO_INCREMENT),保证插入效率且减少页分裂。

索引并非越多越好:每个索引会降低写入速度(需维护索引结构)。合并重复索引,例如将(a)和(a,b)合并为(a,b)。
避免低选择性字段的单列索引:如性别字段(仅“男/女”两种值),过滤性差,MySQL可能忽略该索引。

基于SQL综合设计:分析表中所有查询语句,按过滤性从高到低排列字段。例如,查询WHERE status=1 AND date>‘2023-01-01’的索引应为(status, date)。
最左前缀原则:组合索引(a,b,c)仅对a、a+b、a+b+c生效,单独查询b或c无法利用索引。

外键的性能代价:外键检查需跨表验证,增加锁竞争。推荐在应用层维护数据一致性(如事务或触发器)。

使用前缀索引:对长字符串(如VARCHAR(255))仅索引前N个字符(如INDEX(name(10))),平衡存储与查询效率。
避免全字段索引:过长的索引占用空间大且维护成本高。

仅前缀匹配有效:
✅ col LIKE 'abc%':使用索引。
❌ col LIKE '%abc%'或col LIKE '%abc':无法使用索引,导致全表扫描。
替代方案:对模糊查询需求,考虑使用全文索引(FULLTEXT)或搜索引擎(如Elasticsearch)。

MySQL索引设计的核心是减少冗余、提升选择性、遵循最左前缀,同时避免外键和过度索引。通过合理设计主键、组合索引及前缀索引,并注意LIKE查询的局限性,可显著优化查询性能。