14.6 隐藏索引
MySQL 8.x开始支持隐藏索引,隐藏索引不会被优化器使用,但是仍然需要维护。隐藏索引通常会在软删除和灰度发布的场景中使用。
14.6.1 隐藏索引概述
在MySQL 5.7版本之前,只能通过显式的方式删除索引,此时,如果发现删除索引后出现错误,又只能通过显式创建索引的方式将删除的索引创建回来。如果数据表中的数据量非常大,或者数据表本身比较大,这种操作就会消耗系统过多的资源,操作成本非常高。
从MySQL 8.x开始支持隐藏索引,只需要将待删除的索引设置为隐藏索引,使查询优化器不再使用这个索引,确认将索引设置为隐藏索引后系统不受任何响应,就可以彻底删除索引。这种通过先将索引设置为隐藏索引,再删除索引的方式就是软删除。
创建索引时,将索引设置为隐藏索引,通过修改查询优化器的开关,使隐藏索引对查询优化器可见,通过EXPLAIN对索引进行测试,确认新创建的隐藏索引有效,再将其设置为可见索引。这种方式就是灰度发布。
14.6.2 语法格式
创建隐藏索引同样可以使用ALTER TABLE和CREATE INDEX两种方式,