MySQL8隐藏索引
MySQL 8.0 支持了 Invisible Indexes
隐藏索引 这个特性,可以把某个索引设置为对优化器不可见,生成查询计划时便不使用这个索引了,但这个索引还是被正常维护的,例如表数据变更后还是会更新索引。
我们都知道维护一个索引带来的成本是很高的,当数据量越大的时候成本越高。不知道大家有没有遇到过一种场景就是做数据库优化时,我们可能会去删除一些多余的索引,我们要去线上禁用掉一个索引然后去观察对查询效率的一个影响,在8.0之前我们可能只能将数据导出到一个新的环境,然后再去删除掉这个索引,如果观察发现影响面比较大,那么就不能去删。还有一种方案是直接删线上的索引不行再加回来,稍微体量大一点的公司都是不被允许的。
那么在8.0 之后我们就不用这么麻烦了,官方为我们提供了一个新的功能叫隐藏索引,或者你可以理解成为灰度索引,它的作用类似于回收站功能。虽然我删除了某个文件但是这个文件其实还在。如果碰到上面的这种场景,就可以直接使用这个隐藏索引。
索引设置为隐藏索引
alter table xxx alter index xxx invisible;
索引设置为非隐藏索引
alter table xxx alter index xxx visible;
![](/images/780-200-2.jpg)