如何利用MySQL 8.0的Invisible Index特性在性能测试中隐藏索引?
- 内容介绍
- 文章标签
- 相关推荐
本文共计853个文字,预计阅读时间需要4分钟。
使用以下SQL语句即可将表索引设置为不可见,操作属于元数据级别变更,瞬间完成:
ALTER TABLE orders ALTER INDEX idx_user_id INVISIBLE;
注意:执行前必须确认该索引不是主键,也不是隐式主键(即没有显式主键时,第一个 UNIQUE NOT NULL 索引)。否则会报错 ERROR 3522 (HY000): A primary key index cannot be invisible。
- 不能对
PRIMARY索引执行该操作,无论是否显式定义 - 如果表没主键但有
UNIQUE (a) NOT NULL,这个索引也属于隐式主键,同样禁止隐藏 - 普通二级索引、前缀索引、函数索引都支持隐藏
怎么验证隐藏是否生效?
别只信命令返回的 Query OK,要查 INFORMATION_SCHEMA.STATISTICS 或用 SHOW INDEX 看真实状态:
SELECT INDEX_NAME, IS_VISIBLE FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'orders' AND INDEX_NAME = 'idx_user_id';
返回 NO 才算成功隐藏。
本文共计853个文字,预计阅读时间需要4分钟。
使用以下SQL语句即可将表索引设置为不可见,操作属于元数据级别变更,瞬间完成:
ALTER TABLE orders ALTER INDEX idx_user_id INVISIBLE;
注意:执行前必须确认该索引不是主键,也不是隐式主键(即没有显式主键时,第一个 UNIQUE NOT NULL 索引)。否则会报错 ERROR 3522 (HY000): A primary key index cannot be invisible。
- 不能对
PRIMARY索引执行该操作,无论是否显式定义 - 如果表没主键但有
UNIQUE (a) NOT NULL,这个索引也属于隐式主键,同样禁止隐藏 - 普通二级索引、前缀索引、函数索引都支持隐藏
怎么验证隐藏是否生效?
别只信命令返回的 Query OK,要查 INFORMATION_SCHEMA.STATISTICS 或用 SHOW INDEX 看真实状态:
SELECT INDEX_NAME, IS_VISIBLE FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'orders' AND INDEX_NAME = 'idx_user_id';
返回 NO 才算成功隐藏。

