答案:索引设计需遵循命名规范、创建原则和联合索引使用规则,避免失效场景。应统一命名如idx_表名_字段名,单表索引不超过6个,优先为高频查询字段建索引,联合索引按最左前缀原则设计,避免函数操作、隐式转换、前模糊等导致失效,定期通过慢日志和EXPLAIN优化,合理控制数量以平衡读写性能。

MySQL索引设计直接影响查询性能和数据写入效率,合理的索引规范能显著提升数据库稳定性与响应速度。以下是从实际开发中总结出的常见索引使用规范,适用于大多数OLTP场景。
1. 索引命名规范
统一命名有助于后期维护和排查问题。
- 普通索引以 idx_表名_字段名 命名,如
idx_user_mobile - 联合索引按字段顺序拼接,字段过多可缩写或取关键部分,如
idx_order_status_create_time - 唯一索引以 uk_表名_字段名 开头,如
uk_user_email - 主键索引统一为
PRIMARY,不自定义名称 - 避免使用过长或特殊字符,建议全小写加下划线
2. 索引创建原则
不是所有字段都需要索引,应结合查询场景合理设计。
- 高频出现在
WHERE、JOIN、ORDER BY、GROUP BY中的字段优先考虑建索引 - 单表索引数量建议不超过6个,避免影响写性能
- 避免重复冗余索引,例如已有
(a,b,c)就无需再建(a,b) - 区分度低的字段(如性别、状态位)一般不单独建索引,除非是覆盖索引的一部分
- 大字段(如
TEXT、BLOB)不建议做索引,如需可使用前缀索引并评估效果
3. 联合索引使用规范
联合索引遵循最左前缀匹配原则,设计时需注意字段顺序。
BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛
- 将筛选性高、过滤能力强的字段放在前面,如时间范围或用户ID
- 等值查询字段在前,范围查询字段在后,例如
WHERE user_id = 1 AND create_time > '2024-01-01',应建(user_id, create_time) - 避免跨列使用导致无法命中索引,如
WHERE a=1 AND c=3在(a,b,c)索引中只能用到 a - 尽可能使用覆盖索引,减少回表次数,提升查询效率
4. 避免索引失效的常见情况
即使建了索引,不当的SQL写法也会导致索引无法使用。
- 避免在索引字段上做函数操作,如
WHERE YEAR(create_time) = 2024应改为WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31' - 不要对索引字段进行隐式类型转换,如字符串字段传数字会导致全表扫描
- 使用
LIKE时,前模糊匹配(LIKE '%abc')无法使用索引,尽量用后模糊 - 避免在索引列上使用
!=或NOT IN,这类操作通常不走索引 -
OR条件中若部分字段无索引,可能导致整体索引失效,建议拆分或使用UNION
5. 其他建议
- 定期分析慢查询日志,结合
EXPLAIN检查执行计划,确认索引是否生效 - 对于大数据量表,添加索引应在低峰期操作,避免锁表影响业务
- 使用
pt-online-schema-change等工具在线加索引,减少对线上服务的影响 - 监控索引使用率,可通过
information_schema.STATISTICS和performance_schema分析哪些索引长期未被使用,考虑清理
基本上就这些。索引不是越多越好,关键是根据业务查询模式合理设计,持续优化。









