MySQL数据恢复后索引失效怎么办_执行ALTER TABLE重建索引
索引未生效是因元数据与B树结构脱节需用SHOW INDEX确认Cardinality非零ALTER TABLE ... FORCE强制重建更可靠。ALTER TABLE重建索引时为什么没生效MySQL数据恢复后索引“看起来还在”但查询变慢、EXPLAIN显示没走索引大概率是索引元数据和实际B树结构脱节了——尤其是用物理文件拷贝如直接复制ibd文件或mysqldump未带--skip-triggers --skip-extended-insert等选项恢复时InnoDB的聚簇索引和二级索引可能处于不一致状态。此时执行ALTER TABLE t ENGINEInnoDB或ALTER TABLE t ADD INDEX idx_x(x)看似成功但旧索引页没被真正清理新索引也没完全接管查询路径。优先用SHOW INDEX FROM t确认索引是否真实存在且Cardinality非零若Cardinality为NULL或0说明统计信息失效索引大概率不可用不要只依赖DESCRIBE t或SHOW CREATE TABLE t——它们只显示DDL定义不反映存储引擎层的真实索引结构对大表ALTER TABLE ... FORCE比单纯ENGINEInnoDB更可靠它强制重建整个表含所有索引而非仅触发隐式重建MyISAM表恢复后索引损坏的特殊处理MyISAM不支持事务索引文件.MYI和数据文件.MYD分离恢复时若只复制了.MYD而忽略.MYI或者REPAIR TABLE中途失败就会出现“索引存在但查不到数据”或“Incorrect key file for table”错误。先运行myisamchk -s /var/lib/mysql/db/t.MYI检查索引文件完整性报错就立刻停手别再写入修复必须用myisamchk -r -v /var/lib/mysql/db/t.MYI-r是关键-safe-recover在严重损坏时反而会跳过部分索引页修复后务必重启MySQL或执行FLUSH TABLES否则缓存中的旧索引描述符仍可能被使用重建索引后查询仍不走索引的排查点即使ALTER TABLE返回成功EXPLAIN仍显示type: ALL常见原因不是索引没建好而是优化器主动弃用了它。 VWO 一个A/B测试工具