MySQL 8.0的不可见索引有哪些

  介绍

这篇文章将为大家详细讲解有关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的不可见索引有哪些