首页/数据/SQL 速查/不可见索引:上线前验证删索引
性能与执行计划72 条

不可见索引:上线前验证删索引

MySQL 8.0 支持把索引设为 INVISIBLE:优化器忽略它但索引仍被维护,用于验证“删掉这个索引会不会变慢”。

SQL 速查数据更新于 2026-10-12

示例

示例
ALTER TABLE orders ALTER INDEX idx_status INVISIBLE;   -- 优化器忽略该索引
SHOW INDEX FROM orders;                                -- Visible 列为 No

-- 观察一段时间确认无影响后再真正删除
ALTER TABLE orders DROP INDEX idx_status;
-- 如有问题,恢复可见即可
ALTER TABLE orders ALTER INDEX idx_status VISIBLE;
维护成本不可见索引仍随写入更新,磁盘与写代价不省
用途灰度验证、快速回退
限制主键不能设为 INVISIBLE;外键相关索引有额外限制
不可见索引适合做下线前验证:确认查询模式确实不用它,再执行 DROP INDEX。

易错点

  • 把不可见当“零成本下线”:索引仍占空间并随写更新,验证通过后要真正删除
  • 对主键或外键依赖索引设置不可见:会被拒绝或引入风险,操作前先查依赖

数据来源与参考

  • MySQL 8.0 Reference Manual · Invisible Indexes
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌