怎么快速发现表里有重复索引MySQL 本身不报错也不警告但冗余索引会拖慢写入、浪费内存、让 EXPLAIN 分析更难读。真正有效的检查方式是查 information_schema而不是靠肉眼扫 SHOW CREATE TABLE。用 SELECT 对比索引列组合每个索引的 seq_in_index 必须严格一致才能算“完全重复”比如 (a,b) 和 (a,b,c) 是包含关系不算重复但 (a,b) 和 (b,a) 在查询条件为 WHERE a1 AND b2 时效果接近需人工判断是否冗余执行这句就能揪出明显重复同一张表、相同列顺序、相同类型SELECT table_name, index_name, GROUP_CONCAT(column_name ORDER BY seq_in_index) cols FROM information_schema.statistics WHERE table_schema your_db GROUP BY table_name, cols HAVING COUNT(*) 1;注意 index_type如 BTREE vs HASH和 sub_part前缀长度不同也会导致看似重复实则不可删——比如一个索引是 name(10)另一个是 name(20)就不能简单合并删除冗余索引前必须确认的三件事直接 DROP INDEX 可能导致慢查询突然爆发尤其在没监控 SQL 模式的情况下。查 performance_schema.table_io_waits_summary_by_index_usageMySQL 8.0或用 pt-index-usage 工具回放 slow log确认该索引是否真没人用——别只看“没被 WHERE 用”ORDER BY 或 GROUP BY 也可能依赖它检查是否有唯一约束或主键隐式依赖这个索引比如你删了 UNIQUE(a)但业务逻辑靠它防重那 INSERT IGNORE 就会失效确认存储引擎行为InnoDB 的二级索引叶子节点存主键值所以 (a) 和 (a,b) 虽然列有重叠但如果查询常需要 b留后者反而减少回表而 MyISAM 没回表概念冗余更纯粹DROP INDEX 为什么有时会卡住或失败不是权限或语法问题而是 MySQL 内部锁和元数据变更机制在起作用。 NameGPT名称生成器 免费AI公司名称生成器AI在线生成企业名称注册公司名称起名大全。