隐藏索引
mysql吧
全部回复
仅看楼主
level 12
幽幽七火 楼主
隐藏索引(invisible index)
  隐藏索引不会被优化器使用,但仍需要维护
  应用场景:
  1)软删除
    删除索引,在线上,如果删除错了索引,只能通过创建索引的方式将其添加回来,对于一些大的数据库而言,是比较耗性能的;为了避免删错,可以先将其设置为不可见,优化器这时候就不会使用它,但是后台仍然在维护,确定后,再删除。
  2)灰度发布
    与软删除差不多,如果想要测试一些索引的功能或者随后可能会使用到这个索引,可以先将其设置为隐藏索引,对于现有的查询不会产生影响,测试后,确定需要该索引,可以将其设置成可见索引。
  创建隐藏索引,执行如下命令(如果是不隐藏,则不需要后面的invisible关键字):
  >create index 索引名称 on 表名(字段名) invisible;
  查询某一张表的索引,执行如下命令:
  >show index from 表名;
  使用explain语句查看查询优化器对索引的使用情况
  >explain select * from 表名 where 条件;
  查询优化器有很多开关,有一个是use_invisible_indexes(是否使用隐藏索引),默认是off(不适用),将其设置成on,即可使用隐藏索引。查看当前查询优化器的所有开关变脸,执行如下命令:
  >select @@optimizer_switch;
  设置已经存在的索引为可见或者隐藏,执行如下命令:
  >alter table 表名 alter index 索引名 visible;
  >alter table 表名 alter index 索引名 invisible;
  主键不可以设置为隐藏所以。
2021年02月24日 21点02分 1
1