介绍
这篇文章将为大家详细讲解有关MySQL 8.0的不可见索引有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
MySQL 8.0从第一版发布到现在已经走过了4个年头了,8.0版本在功能和代码上做了相当大的改进和重构。和DBA圈子里的朋友交流,大部分还是5.6,5.7的版,本少量的走的比较靠前采用了MySQL 8.0。为了紧追数据库发展的步伐,能够尽早享受技术红利,我们准备将MySQL 8.0引入到有赞的数据库体系。
落地之前我们会对MySQL 8.0的新特性和功能,配置参数,升级方式,兼容性等等做一系列的学习和测试。以后陆陆续续会发布文章出来。本文算是MySQL 8.0新特性学习的第一篇吧,聊聊不可见索引。
<强>不可见索引强>
不可见索引中的不可见是针对优化器而言的,优化器在做执行计划分析的时候(默认情况下)是会忽略设置了不可见属性的索引。
为什么是默认情况下,如果optimizer_switch设置use_invisible_indexes=上是可以继续使用不可见索引。
引用>话不多说,我们先测试几个例子
<>强如何设置不可见索引强>
我们可以通过带上关键字可见|不可见的创建表,创建索引,alter table设置索引的可见性。
mysql>创建表t1 (int, 比;j int, 比;k int, 比;指数i_idx(我)看不见)引擎=innodb; 查询好,0行影响(0.41秒) mysql>创建索引j_idx> mysql>显示创建表t2 \ G *************************** 1。行 *************************** 表:t2 创建表:创建表《终结者2》( “我”int NOT NULL AUTO_INCREMENT, “j”int不是NULL, 主键(“我”), 唯一键“j_idx”(j)/* !80000年看不见*/)引擎=InnoDB的默认字符集=utf8mb4整理=utf8mb4_0900_ai_ci 1行集(0.01秒) mysql>插入t2 (j)值(1),(2),(3),(4),(5)、(6)、(7); 查询好,7行影响(0.04秒) 记录:7重复:警告:0 mysql>解释选择从t2 * j=3 \ G *************************** 1。行 *************************** id: 1 select_type:简单 表:t2 分区:零 类型:所有 possible_keys:零 关键:零 key_len:零 裁判:零 行:7 过滤:14.29 额外的:使用 1行集,警告(0.01秒) mysql>alter table t2改变指数j_idx可见; 查询好,0行影响(0.08秒) 记录:0副本:0警告:0 mysql>解释选择从t2 * j=3 \ G *************************** 1。行 *************************** id: 1 select_type:简单 表:t2 分区:零 类型:常量 possible_keys: j_idx 关键:j_idx key_len: 4 裁判:常量 行:1 过滤:100.00 额外的:使用索引 1行集,警告(0.01秒)<强>使用不可见索引的注意事项
强>功能适用于非主键索引(显式的或隐式的)。
引用>不可见索引是针对非主键索引的。主键不能设置为不可见,这里的主键包括显式的主键或者隐式主键(不存在主键时,被提升为主键的唯一索引),我们可以用下面的例子展示该规则。
mysql>创建表t2 ( 我int非空, j int非空, 祝辞独特j_idx (j) 祝辞)引擎=InnoDB; 查询好,0行影响(0.16秒) mysql>选择index_name is_visible information_schema。统计table_schema=& # 39;测试# 39;和table_name=& # 39; t2 # 39;; + - - - - - - - - - - - - - - - - - - - - - - - - + | INDEX_NAME | IS_VISIBLE | + - - - - - - - - - - - - - - - - - - - - - - - - + | j_idx | | + - - - - - - - - - - - - - - - - - - - - - - - - + 1行集(0.00秒) # # #没有主键的情况下,唯一键被当做隐式主键,不能设置不可见。 mysql>alter table t2改变指数j_idx无形的; 错误3522 (HY000):主键索引不能被看不见的 mysql> mysql>alter table t2添加主键(我); 查询好,0行影响(0.44秒) 记录:0副本:0警告:0 mysql>选择index_name is_visible information_schema。统计table_schema=& # 39;测试# 39;和table_name=& # 39; t2 # 39;; + - - - - - - - - - - - - - - - - - - - - - - - - + | INDEX_NAME | IS_VISIBLE | + - - - - - - - - - - - - - - - - - - - - - - - - + | j_idx | | 主| | | + - - - - - - - - - - - - - - - - - - - - - - - - + 2行集(0.01秒) mysql>alter table t2改变指数j_idx无形的; 查询好,0行影响(0.04秒) 记录:0副本:0警告:0 mysql>选择index_name is_visible information_schema。统计table_schema=& # 39;测试# 39;和table_name=& # 39; t2 # 39;; + - - - - - - - - - - - - - - - - - - - - - - - - + | INDEX_NAME | IS_VISIBLE | + - - - - - - - - - - - - - - - - - - - - - - - - + | j_idx | | 主| | | + - - - - - - - - - - - - - - - - - - - - - - - - + 2行集(0.01秒)MySQL 8.0的不可见索引有哪些