隐式索引 最明显的一个作用类似 索引回收站。例如数据库长时间运行后,会积累很多索引,做数据库优化时,想清理掉没什么用的多余的索引,但可能删除某个索引后,数据库性能下降了,发现这个索引是有用的,就要重新建立。对于较大的表来说,删除、重建索引的成本是很高的,如果在清理索引时能先放入回收站,确认没影响后再彻底删除,有影响的话就恢复回来,这样就方便多了,把索引设置为 隐藏/显示 就可以实现这个需求。索引的隐藏不影响索引维护,主键上不支持该特性
例如:
CREATE TABLE user (
user_id int(11) NOT NULL DEFAULT '0',
user_name varchar(20) DEFAULT NULL,
user_sex varchar(2) DEFAULT NULL,
user_old smallint(6) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入3716414 条数据,
MySQL 8.0 隐藏索引_第1张图片
在user_name上创建索引
CREATE INDEX name_index ON test.user (user_name);
MySQL 8.0 隐藏索引_第2张图片
相比较而言快了好多倍
当我们不能决定是否要使用这个索引时可以把这个user_index 暂时禁掉
ALTER TABLE test.user ALTER INDEX name_index INVISIBLE;
进行查看
MySQL 8.0 隐藏索引_第3张图片
启用时
ALTER TABLE test.user ALTER INDEX name_index VISIBLE;
MySQL 8.0 隐藏索引_第4张图片
当不需要这个索引时,可以删除
DROP INDEX name_index on test.user;