首页 MySQL 隐藏索引

MySQL 隐藏索引

MySQL 8 引入了隐藏索引(invisible index)。隐藏索引是实际存在的,但是对 MySQL 查询优化器不可见的索引。即使使用 FORCE INDEX,优化器也不会使用隐藏索引。

在删除一个索引前,您可以先将索引隐藏。如果这不影响性能,您再去真正的删除索引。

隐藏索引对 MySQL 查询优化器是不可见的,但是它是真实存在的,并且对写入操作保持最新。

MySQL 隐形索引用法

MySQL 允许您使用 VISIBLEINVISIBLE 标识索引是否可见。

创建隐藏索引

要创建隐藏索引,请按照如下语法使用 CREATE INDEX 语句:

CREATE INDEX index_name
ON table_name(c1, c2, ...) INVISIBLE;

修改索引的可见性

要更改现有索引的可见性,请按照如下语法使用 ALTER TABLE 语句:

ALTER TABLE table_name
ALTER INDEX index_name [VISIBLE | INVISIBLE];

通过 ALTER TABLE 语句您可以轻松的切换现有索引的可见性。

注意, 您不能将主键列上的索引设置为隐藏索引,否则 MySQL 会给出一个错误。

MySQL 隐藏索引开关

MySQL 查询优化器默认不使用隐藏索引,但是您可以通过系统变量 optimizer_switch 中的 use_invisible_indexes 修改这一行为。

要查看当前的设置,请使用如下语句:

SELECT @@optimizer_switch;

要在当前会话中修改默认的行为,请使用如下语句:

SET SESSION optimizer_switch="use_invisible_indexes=on";

结论

MySQL 隐藏索引是一个真实存在,但是对 MySQL 查询优化器不可见的索引。

特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。