3-003:在 MySQL 中建索引时需要注意哪些事项?
在 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 性能。🚀