贝利信息

mysql索引是否越多越好_mysql设计误区解析

日期:2026-01-07 00:00 / 作者:P粉602998670
索引并非越多越好,反而会拖慢写入操作、占用资源并干扰优化器选择;低基数字段、重复前缀、仅用于ORDER BY或LIKE '%xxx' 的索引往往无效;应通过EXPLAIN和sys.schema_unused_indexes验证索引实际使用情况,并在建索引前评估查询频率、复用性和替代方案。

索引越多,查询越快?别信这个直觉

不是。索引本身不加速所有查询,反而在写入时强制增加开销,且会显著拖慢 INSERTUPDATEDELETE 操作。MySQL 每次修改数据,都要同步更新对应索引的 B+ 树结构——索引越多,维护成本越高。

更关键的是:无效索引会持续占用内存和磁盘空间,影响 Buffer Pool 利用率,甚至导致执行计划误判(比如优化器因索引过多而选错 key)。

哪些索引大概率是“假有用”?

以下几类索引常被误建,实际几乎不被优化器选用:

怎么判断一个索引是否真被用了?

别靠猜,用 EXPLAINinformation_schema.STATISTICS 交叉验证:

SELECT * FROM sys.schema_unused_indexes 
WHERE object_schema = 'your_db' AND object_name = 'your_table';

建索引前必须问的三个问题

每加一个索引,都该明确回答:

真正难的不是“怎么建索引”,而是“为什么这里不该建”。线上表一旦有千万级数据,删一个无用索引都可能锁表几分钟——设计阶段多花十分钟想清楚,后期省的不止是磁盘和 CPU。