MySQL 中的索引并不是越多越好,索引数量要合理控制!
📌 过多索引的影响
- 增加存储开销
- 每个索引都会占用额外的磁盘空间,索引多了,存储成本增加。
- 降低 INSERT、UPDATE、DELETE 性能
- 任何涉及数据修改的操作,都需要同时更新索引,影响性能。
- 示例 :
INSERT INTO users (id, name) VALUES (1, 'Tom');
,如果users
表有多个索引,则插入时每个索引都需要更新,影响插入速度。
- 可能导致优化器选择错误的索引
- MySQL 可能会因为多个索引存在而选择次优索引,导致查询性能下降。
- 查询优化成本上升
- 查询优化器在执行 SQL 时,需要分析多个索引,选择最佳索引,增加额外计算成本。
✅ 什么时候应该多建索引?
- 经常用于 WHERE 条件的列 (如
status
,email
)。 - 需要 JOIN 或 GROUP BY 的列。
- 查询量大,数据筛选性强的列 (如
user_id
)。 - 组合索引要遵循"最左匹配原则",而不是对所有列都单独建索引。
❌ 什么时候不该建索引?
- 小表不需要索引(数据量小,全表扫描也很快)。
- 低选择性字段(如 gender 只有 男/女),索引意义不大。
- 经常被更新的字段 ,如
last_login_time
,索引会拖慢更新速度。
📝 结论
索引不是越多越好,而是要"恰到好处"!
- 合理设计索引,避免冗余。
- 定期分析查询性能 ,使用
EXPLAIN
查看索引是否生效。 - 删除不必要的索引,保持索引高效。
⚡ 建议 :建立索引前,先分析查询需求,做到"该建则建,不该建则不建"! 🚀