You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
性能
Invisible Index
复制全文
下载 pdf
Invisible Index
本文介绍云数据库 MySQL 版在 MySQL5.7 实例中提供的 invisible index 功能的相关信息。​
背景​
将一个索引设置为不可见后,如果有应用程序或用户在实际使用这个索引,应用程序或用户会收到报错,或产生性能问题。通过这种方式,可以在删除索引前对删除索引的影响进行判断,以此确认是否可以安全删除索引。云数据库 MySQL 版将这个功能从 MySQL 8.0 移植到了 MySQL 5.7,使 MySQL 5.7 也具备了此能力。​
支持版本​
  • MySQL 5.7 版本,内核小版本为 MySQL 5.7.32_20250615 及以上。​
  • MySQL 8.0 版本,不限内核小版本。​
  • MySQL 8.4 版本,且内核小版本为 MySQL 8.4.7_20260415 及以上。​
适用场景​
该功能支持在删除索引前,可将索引设置为不可见,以有无报错或性能问题来判断该索引是否仍在使用,适用于对安全性要求较高的业务场景。​
注意事项​
  • 强制对不可见索引使用 force index 会报错:​
  • ​
    CREATE TABLE `test2` (​
    `i` int DEFAULT NULL,​
    `j` int DEFAULT NULL,​
    `k` int DEFAULT NULL,​
    KEY `idx_i` (`i`),​
    KEY `idx_j` (`j`) INVISIBLE,​
    KEY `idx_k` (`k`) INVISIBLE ​
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;​
    ​
    ​
    mysql> EXPLAIN SELECT i, j FROM test2 FORCE INDEX (idx_j) WHERE j >= 2\G;​
    ERROR 1176 (42000): Key 'idx_j' doesn't exist in table 'test2'​
    ​
  • invisible index 为云数据库 MySQL 版为 MySQL 5.7 新增的语法。使用该语法后,需要注意下游的 binlog 消费。​
使用说明​
  • 可以使用以下语句来创建 invisible 索引,以及将某个索引改为 invisible 索引:​
  • ​
    CREATE TABLE test2 (​
    i INT,​
    j INT,​
    k INT,​
    INDEX idx_i (i) INVISIBLE​
    ) ENGINE = InnoDB;​
    CREATE INDEX idx_j ON test2 (j) INVISIBLE;​
    ALTER TABLE test2 ADD INDEX idx_k (k) INVISIBLE;​
    ALTER TABLE test2 ALTER INDEX idx_i INVISIBLE;​
    ​
  • 可以使用如下语句将其改变为可见索引:​
  • ​
    ALTER TABLE test2 ALTER INDEX idx_i VISIBLE;​
    ​
​
最近更新时间:2026.08.27 11:24:30
这个页面对您有帮助吗?
有用
有用
无用
无用