MySQL 不可见索引 (Invisible Indexes)

MySQL 8.0 版本支持不可见索引(Invisible Indexes),也就是索引对优化器不可见,无法使用不可见索引对查询进行优化,不可见索引不适用于主键。

一、不可见索引的使用场景

在一张大表上创建和删除索引是有高额成本的,有时候需要测试一个索引是否有效,可以临时删除索引,对比索引存在与否,对查询的性能影响。使用索引不可见的特性,就能避免索引被真正删除,在需要的时候,把索引设置为可见即可,避免了索引真正删除和创建带来的影响。

二、不可见索引语法

默认情况下,索引都是可见的,可以使用下面的关键字来指定索引的可见性。

  • VISIBLE
  • INVISIBLE

在创建表,创建索引,修改索引的语句中,使用上述关键字,指定索引的可见性,示例如下:

# 创建表 CREATE TABLE t1 ( i INT, j INT, k INT, INDEX i_idx (i) INVISIBLE ) ENGINE = InnoDB; 1. 创建索引 CREATE INDEX j_idx ON t1 (j) INVISIBLE; 1. 增加索引 ALTER TABLE t1 ADD INDEX k_idx (k) INVISIBLE;