MySQL 8.0-索引- 不可见索引(invisible indexes)

概述

MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。

在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。

我们依然使用拆开来看,然后再把拆出来的词放到MySQL上下文中去看。
不可见索引:

  1. 不可见:这个概念的关键点就是这个不可见。那对谁不可见?对程序员吗?肯定不是,我们新建了一个索引MySQL对我们不可见我们去哪儿找,怎么修改删除哇。 MySQL官方说是对优化器不可见。
  2. 索引:索引大家都知道是个什么东西,目的是用于快速查找到数据(但是具体要看你怎么用)

定义

好了,那我们可以对不可见索引下定义了。
不可见索引是MySQL 8.0引入的一个索引开关,主要是用来控制优化器在进行SQL优化时是否使用该索引,如果对索引设置了不可见,那么SQL优化器就不会使用这个索引。

也就是说,这个索引对SQL优化器透明或者SQL优化器眼瞎看不到它。

使用场景

搞清楚不可见索引是个什么东西以后,我们就可以考虑怎么在实际项目中用它了。

在说什么场景应用之前,我们先考虑一下我们关于CUD索引的痛点。

  1. 要不要新建一个索引来加速某个或者某些查询?如何来评估新建的索引一定会加速查询?
  2. 要不要删除某个索引,为什么要删除它?怎么来评估删除它以后对业务的影响?删除它时会对业务造成什么影响?
  3. 要不要修改一个索引,把这个索引修改为单字段索引或者组合索引?为什么?

这次我们主要会回答第2个问题。

第2个问题是针对“无用”索引的一个处理。

业务上没有用的查询MySQL也会维护它,因为MySQL也不知道它是没用的,索引在那儿MySQL就得在CURD的时候去管他。

如何确定一个索引是没用的?

  1. 使用索引监控工具
  2. 使用Explain查看查询是否覆盖索引

删除它会对业务有什么影响?

如果要评估这个问题,比较靠谱的方案就是你删除这个索引,然后走一遍发版流程,性能测试就得仔细做。确定这个索引可以删除就可以直接用drop命令删除它。

有没有更安全的做法?

那就可以使用不可见索引了。

先将索引设置为不可见,然后进行性能评估,在得到性能评估报告显示没有明显的性能减低以后再把它删除。

不可见索引尤其可以在你不确定一些新特性是否还用某个索引的时候尤其用用。你只要把索引设置为不可见,那么就可以测试新特性然后来决定删除新这个索引。

简单体验下吧

索引可见与不可见更改

  1. 更改索引为不可见

  2. 更改索引为可见

实际执行一下

第1步

我mysql 8.0 test数据库有一张sys_user表,sys_user表有一个name_pinyin字段,我给这个字段添加一个索引idx_name。

然后我explain 以下通过nam_pinyin查询记录,Extra字段显示是Using index,截图如下:

file

第2步

我把idx_name索引设置为不可见,然后再执行相同的explain语句,Extra显示为Using where,截图如下:

file

第3步

我把idx_name索引设置为可见,然后再执行相同的explain雨具,Extra显示Using index,截图如下:

file

Using index和Using where区别

  1. Using index显示使用了索引而且是覆盖索引,如果不清楚覆盖索引可以看下我之前发的覆盖索引的文章。这里是覆盖索引主要是因为我的sys_user表只有两个字段:id和name_pinyin,我选择name_pinyin字段创建一个二级索引,那么这个二级索引会关联聚簇索引,然后我用select * 查使用了这个索引并且不用回表。
  2. Using where type:ALL 表示全表扫表读取数据在内存中来判断where字句的条件有没有满足。为什么在文件里面不能匹配,因为操作系统只有先把数据加载到内存在能进行操作……哈哈。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红桃写作方便吗 #学习方法#微信#微信

红桃写作是一个非常好用的论文写作工具,它不仅方便快捷,而且非常靠谱,能够帮助用户轻松完成论文写作任务。不论是学生还是专业人士,都可以通过红桃写作轻松地完成论文的写作工作,大大提高工作效率。 首先,红…

对话悠易科技蔡芳:品牌逐渐回归核心能力建设,布局和构建自己的流量阵地

关于SaaS模式在中国的发展,网上出现多种声音。Marteker近期采访了一些行业专家,围绕SaaS模式以及Martech在中国的发展提出独特观点。悠易科技副总裁蔡芳认为,中国目前存在SaaS的应用场景与客户需求,用户的应用能力也在提升&#x…

工作中常用到的Linux命令

系统,用户信息操作相关命令 查看主机ip地址 ifconfig 获取用户信息 id 修改用户密码 passwd 查看链接用户 who 创建新用户账号 useradd 删除用户账号 userdel 修改用户账号的属性 usermod 查看系统发行版本 cat /proc/version 说明适用于所有版本。…

鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染

ForEach基于数组类型数据执行循环渲染。 说明: 从API version 9开始,该接口支持在ArkTS卡片中使用。 接口描述 ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number): string …

【算法每日一练]-图论(保姆级教程篇16 树的重心 树的直径)#树的直径 #会议 #医院设置

目录 树的直径 题目:树的直径 (两种解法) 做法一: 做法二: 树的重心: 题目: 会议 思路: 题目:医院设置 思路: 树的直径 定义:树中距离最…

excel统计分析——秩相关分析

参考资料:生物统计学,https://real-statistics.com/statistics-tables/spearmans-rho-table/ 相关于回归分析法只适用于正态分布资料,对于非正态分布资料,需要使用新的分析方法。秩相关分析也称为等级相关分析,是分析成…

Linux——生产者消费者模型

为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,…

硬核分享|使用AI模型给黑白照片上色与高清修复

硬核分享|使用AI模型给黑白照片上色与高清修复_哔哩哔哩_bilibili 本文介绍了如何修复褪色、模糊或损坏的图片以及老旧照片上色的工具及使用方法; 低清修复前 高清修复后 我们在日常生活中可能会频繁地接触到一些历史悠久、画面模糊甚至破损严重的照片。这类照片往往…

使用Intellij idea编写Spark应用程序(Scala+Maven)

使用Intellij idea编写Spark应用程序(ScalaMaven) 对Scala代码进行打包编译时,可以采用Maven,也可以采用sbt,相对而言,业界更多使用sbt。这里介绍IntelliJ IDEA和Maven的组合使用方法。IntelliJ IDEA和SBT的组合使用方法&#xf…

如何使用OpenHarmony实现一个模拟应用首次启动

应用首次启动(ArkTS) 介绍 本篇Codelab基于自定义弹框、首选项和页面路由实现一个模拟应用首次启动的案例。需要完成以下功能: 实现四个页面,启动页、隐私协议页、广告页、应用首页。页面之间的跳转。实现自定义隐私协议弹窗&a…

JAVA实战开源项目:大病保险管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大病保险管理2.4 大病登记管理2.5 保险审核管理 三、系统详细设计3.1 系统整体配置功能设计3.2 大病人员模块设计3.3 大病保险模块设计3.4 大病登记模块设计3.5 保险审核模块设计 四、…

C程序编译、链接与项目构建

C程序编译、链接与项目构建 摘要C编译环境静、动态库介绍gcc与g和程序编译、链接Visual Studio创建和链接库动态库的显示调用 Make介绍安装使用 CMake介绍安装使用构建方式内部构建外部构建构建使用静/动态库常用[系统]变量常用指令CMake模块 Make与CMake的联系与区别 摘要 本…

优化选址问题 | 基于鹈鹕算法求解基站选址问题含Matlab源码

目录 问题代码问题 鹈鹕算法(Pelican Optimization Algorithm, POA)是一种相对较新的启发式优化算法,模拟了鹈鹕鸟觅食的行为。这种算法通常用于解决复杂的优化问题,如函数优化、路径规划、调度问题等。基站选址问题通常是一个复杂的优化问题,需要考虑覆盖范围、干扰、成…

迷宫(一)(DFS BFS)

//新生训练 #include <bits/stdc.h> using namespace std; int n, m; bool f; char mp[15][15]; int vis[15][15]; int dir[4][2] {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; bool in(int x, int y) {return 0 < x && x < n && 0 < y && y …

kali安装docker(亲测有效)

第一步&#xff1a;添加Docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 第二步&#xff1a; 第二步更新源 echo deb https://download.docker.com/linux/debian stretch stable> /etc/apt/sources.list.d/docker.list…

基于python+vue超市在线销售系统的设计与实现flask-django-php-nodejs

根据此问题&#xff0c;研发一套超市在线销售系统&#xff0c;既能够大大提高信息的检索、变更与维护的工作效率&#xff0c;也能够方便信息系统的管理运用&#xff0c;从而减少信息管理成本&#xff0c;提高效率。 该超市在线销售系统采用B/S架构、并采用python语言以及django…

图床项目实战:后续开发与优化

在之前的文章中&#xff0c;我们介绍了图床项目的基本实现&#xff0c;接下来&#xff0c;我将提供扩展功能和优化性能的关键代码片段。 一、图片分类管理 首先&#xff0c;我们需要在数据库中创建分类表&#xff0c;并在图片表中添加分类字段。 class Category(db.Model): …

生物信息学文章中常见的图应该怎么看?

目录 火山图 热图 箱线图 森林图 LASSO回归可视化图&#xff08;套索图&#xff09; 交叉验证图 PCA图 ROC曲线图 这篇文章只介绍这些图应该怎么解读&#xff0c;具体怎么绘制&#xff0c;需要什么参数&#xff0c;怎么处理数据&#xff0c;会在下一篇文章里面给出 火山…

AIGC——ComfyUI SDXL多种风格预设提示词插件安装与使用

概述 SDXL Prompt Styler可以预先给SDXL模型提供了各种预设风格的提示词插件&#xff0c;相当于预先设定好了多种不同风格的词语。使用这个插件&#xff0c;只需从中选取所需的风格&#xff0c;它会自动将选定的风格词汇添加到我们的提示中。 安装 插件地址&#xff1a;http…

使用双异步后,从 191s 优化到 2s

使用双异步后&#xff0c;从 191s 优化到 2s 一般我会这样做&#xff1a; 通过POI读取需要导入的Excel&#xff1b; 以文件名为表名、列头为列名、并将数据拼接成sql&#xff1b; 通过JDBC或mybatis插入数据库&#xff1b; 操作起来&#xff0c;如果文件比较多&#xff0…