合理创建索引可提升MySQL查询性能,主要方式包括建表时定义、ALTER TABLE添加或CREATE INDEX语句;需根据场景选择普通、唯一、主键、组合或前缀索引,遵循最左前缀原则,优先为WHERE、ORDER BY等子句涉及列建索引,避免过度索引以减少写开销和存储占用,结合EXPLAIN分析执行计划,定期清理无用索引,并在大表加索引时选择低峰期操作以降低影响。

在MySQL中,索引是提升查询性能的关键手段。合理创建和优化索引,能显著减少数据扫描量,加快检索速度。但索引并非越多越好,不当的索引反而会增加写操作的开销并占用更多存储空间。
如何创建MySQL索引
创建索引主要有以下几种方式:
- 创建表时定义索引:可以在建表语句中直接添加索引。例如:
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
INDEX idx_name (name),
UNIQUE INDEX uk_email (email)
);
- 使用ALTER TABLE添加索引:对已有表添加索引:
- 使用CREATE INDEX语句:这是标准语法,更清晰:
支持普通索引、唯一索引、全文索引和空间索引,根据业务场景选择。
常见索引类型与适用场景
了解不同索引类型有助于做出合理选择:
KGOGOMall 是一套采用 Php + MySql 开发的基于 WEB 应用的 B/S 架构的B2C网上商店系统。具有完善的商品管理、订单管理、销售统计、新闻管理、结算系统、税率系统、模板系统、搜索引擎优化,数据备份恢复,会员积分折扣功能,不同的会员有不同的折扣,支持多语言,模板和代码分离等,轻松创建属于自己的个性化用户界面。主要面向企业和大中型网商提供最佳保障,最大化满足客户目前及今后的独立
- 普通索引(INDEX):最基本的索引类型,允许重复值,适合大多数查询字段。
- 唯一索引(UNIQUE):约束列值唯一,可用于防止数据重复,如身份证号、手机号。
- 主键索引(PRIMARY KEY):特殊的唯一索引,不允许NULL值,每张表只能有一个。
- 组合索引(Composite Index):多个列组合成一个索引,遵循最左前缀原则。
- 前缀索引:对字符串前N个字符建立索引,节省空间,但可能降低选择性。
索引设计与优化建议
有效的索引策略需要结合实际查询模式:
- 优先为WHERE、ORDER BY和GROUP BY涉及的列创建索引:这些子句直接影响查询执行计划。
- 善用组合索引而非多个单列索引:MySQL通常一次查询只用一个索引,组合索引可覆盖更多条件。
- 注意最左前缀原则:组合索引(a,b,c)能命中a、a+b、a+b+c的查询,但不能命中b或c单独的查询。
- 避免过度索引:每个额外索引都会影响INSERT、UPDATE、DELETE性能,并占用磁盘空间。
-
定期分析和优化索引:使用
EXPLAIN查看执行计划,确认是否走索引;通过SHOW INDEX FROM table_name检查现有索引。 - 考虑索引的选择性:高选择性(即唯一值多)的列更适合做索引,比如用户邮箱比性别更适合作为索引。
监控与维护索引
创建后需持续关注索引的实际效果:
- 使用
EXPLAIN SELECT ...分析关键SQL是否命中预期索引。 - 通过
INFORMATION_SCHEMA.STATISTICS查看索引统计信息。 - 定期清理无用索引,可通过查询
performance_schema中的索引使用情况辅助判断。 - 大表加索引建议在低峰期操作,避免锁表时间过长,可用
ALGORITHM=INPLACE和LOCK=NONE(支持的情况下)减少影响。
基本上就这些。掌握索引的创建方法和优化原则,结合具体业务查询模式进行调整,才能真正发挥其价值。不复杂但容易忽略细节,比如前缀长度选择、组合顺序等,都需要结合数据分布来决策。









