1, 隐藏索引
MySQL 8.0开始支持隐藏索引 (invisible index),不可见索引.
隐藏索引不会被优化器使用,但仍然需要进行维护。 应用场景: 软删除、灰度发布。
软删除:就是我们在线上会经常删除和创建索引,如果是以前的版本,我们如果删除了索引,后面发现删错了,我又需要创建一个索引,这样做的话就非常影响性能。在MySQL8中我们可以这么操作,把一个索引变成隐藏索引(索引就不可用了,查询优化器也用不上),最后确定要进行删除这个索引我们才会进行删除索引操作。
灰度发布:也是类似的,我们想在线上进行一些测试,可以先创建一个隐藏索引,不会影响当前的生产环境,然后我们通过一些附加的测试,发现这个索引没问题,那么就直接把这个索引改成正式的索引,让线上环境生效。
使用案例(灰度发布):
create table t1(i int,j int); --创建一张t1表
create index i_idx on t1(i); --创建一个正常索引
create index j_idx on t1(j) invisible; --创建一个隐藏索引
show index from t1\G --查看索引信息