在 MySQL 中创建索引时,需要注意以下事项,以确保索引高效且合理:
1. 选择合适的索引类型
- 主键索引(PRIMARY KEY):每个表只能有一个,默认是聚簇索引。
- 唯一索引(UNIQUE):确保列中的数据唯一。
- 普通索引(INDEX):加快查询速度,但不保证唯一性。
- 全文索引(FULLTEXT):用于全文搜索(仅适用于 MyISAM、InnoDB)。
- 前缀索引(PREFIX):对长字符串列,索引前几个字符可节省存储空间。
2. 避免过多索引
- 索引会加快查询,但增加存储占用,降低插入、更新、删除性能。
- 仅对高频查询、WHERE 条件列、JOIN 关联列建立索引。
3. 选择合适的列建立索引
- 选择高选择性列(如 id、email),避免低选择性列(如gender只有男/女)。
- 索引长度尽量短,对长字符串可以用前缀索引。
- 避免对 BLOB、TEXT 建索引,可以用 VARCHAR(N)。
4. 使用联合索引(复合索引)
- 最左匹配原则:MySQL 使用索引时,从左到右匹配索引字段。
- 避免冗余索引:不要建立功能重复的索引,如 (a,b)和(a),后者是冗余的。
- 考虑索引顺序:常用于查询的列放前面,如 WHERE a = ? AND b = ?,则索引INDEX(a, b)更有效。
5. 避免索引失效
- 避免函数操作:WHERE LEFT(name,3) = 'abc'会导致索引失效。
- 避免隐式类型转换:WHERE phone = 123456,若phone为VARCHAR,索引失效。
- 避免 OR 语句:WHERE a = 1 OR b = 2,MySQL 可能不会使用索引。
6. 监控索引使用情况
- 使用 EXPLAIN SELECT ...查看查询是否走索引。
- SHOW INDEX FROM table_name;查看表的索引情况。
- ANALYZE TABLE table_name;更新索引统计信息。
总结:合理设计索引,遵循最左匹配,避免冗余索引,优化索引长度,关注查询模式,并定期分析索引使用情况,才能让索引真正提高 MySQL 性能。🚀