MySQL8功能详解——隐藏索引
时间:2022-07-26
本文章向大家介绍MySQL8功能详解——隐藏索引,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
隐藏索引是指索引对MySQL优化器隐藏(不可见),开启该功能后,索引并没有真的消失,相关的维护还存在,只是优化器并不去使用该索引。这个功能在测试评估索引有效性时非常有用。DBA对希望删除的索引开启该功能,经过完整验证,确认之后,可以放心删除索引。
所有的索引默认是可见的,可以在 CREATE TABLE, CREATE INDEX, ALTER TABLE的时候,对新索引设置为不可见。使用方法如下:
CREATE TABLE t1(
a INT,
b INT,
c INT,
INDEX a_idx(a) INVISIBLE
) ENGINE = InnoDB;
CREATE INDEX b_idx ON t1 (b) INVISIBLE;
ALTER TABLE t1 ADD INDEX c_idx(c) INVISIBLE;
此外,使用INVISIBLE和VISIBLE通过ALTER TABLE ... ALTER INDEX对已经存在的索引进行更改。使用方法如下:
ALTER TABLE t1 ALTER INDEX a_idx INVISIBLE;
ALTER TABLE t1 ALTER INDEX a_idx VISIBLE;
想知道当前索引是否被隐藏,可以通过查询INFORMATION_SCHEMA.STATISTICS 表或者SHOW INDEX的输出结果来确认
SELECT INDEX_NAME, IS_VISIBLE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1';
+------------+------------+
| INDEX_NAME | IS_VISIBLE |
+------------+------------+
| a_idx | YES |
| b_idx | NO |
| c_idx | NO |
+------------+------------+
当将索引设置为不可见时,可以通过下面几个方法确认优化器是否需要使用到该索引:
- 使用到该索引的索引提示语句会发生错误。
- 查询的执行计划和之前的不同
- 查询出现在慢日志中
- Performance Schema里面相关的查询工作量会增加
此外,隐藏索引不影响索引的维护。数据发生更改的同时,索引也会持续更新。另外需要注意的一点,如果没有显式主键的表具有NOT NULL列的唯一索引,该索引和显式主键具有相同的约束,不能隐藏该索引。例如:
CREATE TABLE t2 (
a INT NOT NULL,
b INT NOT NULL,
UNIQUE b_idx (b)
) ENGINE = InnoDB;
ALTER TABLE t2 ALTER INDEX b_idx INVISIBLE;
ERROR: 3522 (HY000):A primary key index cannot be invisible
以上内容是关于隐藏索引的介绍,更为详尽的内容请参照官网手册。https://dev.mysql.com/doc/refman/8.0/en/invisible-indexes.html
感谢关注MySQL!
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- vue入门003~vue项目引入element并创建一个登录页面
- vue入门002~vue项目的两种创建方式
- IntelliJ IDEA,WebStorm,PhpStorm破解到2089年
- 小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
- 借助云开发10行代码实现短信验证码的发送
- 借助云开发实现小程序订阅消息(模板消息)推送功能
- 1小时实战入门小程序开发,历史上的今天案例讲解
- 小程序实现全屏幕高斯模糊背景图
- 小程序顶部导航栏,可滑动,可动态选中放大
- 小程序不同页面的异步回调,callback和promise的使用讲解
- java入门019~springboot批量导入excel数据到mysql
- Java点餐系统和点餐小程序新加微信消息推送功能
- Java点餐系统和点餐小程序新加排号等位功能
- IDEA上给文件添加姓名,日期,版本号
- matlab机器人工具箱安装与卸载