MySQL 8.0-索引- 不可见索引(invisible indexes)
概述
MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。
在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。
我们依然使用拆开来看,然后再把拆出来的词放到MySQL上下文中去看。
不可见索引:
- 不可见:这个概念的关键点就是这个不可见。那对谁不可见?对程序员吗?肯定不是,我们新建了一个索引MySQL对我们不可见我们去哪儿找,怎么修改删除哇。 MySQL官方说是对优化器不可见。
- 索引:索引大家都知道是个什么东西,目的是用于快速查找到数据(但是具体要看你怎么用)
定义
好了,那我们可以对不可见索引下定义了。
不可见索引是MySQL 8.0引入的一个索引开关,主要是用来控制优化器在进行SQL优化时是否使用该索引,如果对索引设置了不可见,那么SQL优化器就不会使用这个索引。
也就是说,这个索引对SQL优化器透明或者SQL优化器眼瞎看不到它。
使用场景
搞清楚不可见索引是个什么东西以后,我们就可以考虑怎么在实际项目中用它了。
在说什么场景应用之前,我们先考虑一下我们关于CUD索引的痛点。
- 要不要新建一个索引来加速某个或者某些查询?如何来评估新建的索引一定会加速查询?
- 要不要删除某个索引,为什么要删除它?怎么来评估删除它以后对业务的影响?删除它时会对业务造成什么影响?
- 要不要修改一个索引,把这个索引修改为单字段索引或者组合索引?为什么?
这次我们主要会回答第2个问题。
第2个问题是针对“无用”索引的一个处理。
业务上没有用的查询MySQL也会维护它,因为MySQL也不知道它是没用的,索引在那儿MySQL就得在CURD的时候去管他。
如何确定一个索引是没用的?
- 使用索引监控工具
- 使用Explain查看查询是否覆盖索引
删除它会对业务有什么影响?
如果要评估这个问题,比较靠谱的方案就是你删除这个索引,然后走一遍发版流程,性能测试就得仔细做。确定这个索引可以删除就可以直接用drop命令删除它。
有没有更安全的做法?
那就可以使用不可见索引了。
先将索引设置为不可见,然后进行性能评估,在得到性能评估报告显示没有明显的性能减低以后再把它删除。
不可见索引尤其可以在你不确定一些新特性是否还用某个索引的时候尤其用用。你只要把索引设置为不可见,那么就可以测试新特性然后来决定删除新这个索引。
简单体验下吧
索引可见与不可见更改
-
更改索引为不可见
-
更改索引为可见
实际执行一下
第1步
我mysql 8.0 test数据库有一张sys_user表,sys_user表有一个name_pinyin字段,我给这个字段添加一个索引idx_name。
然后我explain 以下通过nam_pinyin查询记录,Extra字段显示是Using index,截图如下:
第2步
我把idx_name索引设置为不可见,然后再执行相同的explain语句,Extra显示为Using where,截图如下:
第3步
我把idx_name索引设置为可见,然后再执行相同的explain雨具,Extra显示Using index,截图如下:
Using index和Using where区别
- Using index显示使用了索引而且是覆盖索引,如果不清楚覆盖索引可以看下我之前发的覆盖索引的文章。这里是覆盖索引主要是因为我的sys_user表只有两个字段:id和name_pinyin,我选择name_pinyin字段创建一个二级索引,那么这个二级索引会关联聚簇索引,然后我用select * 查使用了这个索引并且不用回表。
- Using where type:ALL 表示全表扫表读取数据在内存中来判断where字句的条件有没有满足。为什么在文件里面不能匹配,因为操作系统只有先把数据加载到内存在能进行操作……哈哈。。。
相关文章:

MySQL 8.0-索引- 不可见索引(invisible indexes)
概述 MySQL 8.0引入了不可见索引(invisible index),这个在实际工作用还是用的到的,我觉得可以了解下。 在介绍不可见索引之前,我先来看下invisible index是个什么或者定义。 我们依然使用拆开来看,然后再把拆出来的词放到MySQL…...

Uibot6.0 (RPA财务机器人师资培训第3天 )财务招聘信息抓取机器人案例实战
训练网站:泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博…...
Eureka和Nacos的关系
目录 它们的比较: 结论: Eureka和Nacos都是服务发现和注册中心,它们在微服务架构中扮演着关键角色,但它们是由不同的组织开发的,服务于类似但不完全相同的目的。以下是它们之间的关系: Eureka:…...

极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案
随着视频互动深入工作日常,很多客户需要自建一个会议,监控的交互平台,目前外面不管是开源还是非开源的平台,都是极为复杂,一般linux安装库关联部署复杂,非技术人员根本没办法使用,不方便集成部署…...

5G智能网关助力工业铸造设备监测升级
随着物联网技术的迅猛发展和工业4.0浪潮的推进,传统工业正面临着严峻的转型升级压力。在这一背景下,铸造行业——这一典型的传统重工业领域,也必须积极探索借助5G、物联网、边缘计算等技术提升生产经营效率的新路径。 本文就基于佰马合作伙伴…...

奇舞周刊第523期:来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处...
奇舞推荐 ■ ■ ■ 来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处 过去很长一段时间,前端框架们都在往响应式的方向发展。同时又由于 React hooks 的深远影响,函数式 响应式成为了不少前端心中最理想的前端框架模样。Solid …...

《边缘计算:连接未来的智慧之桥》
随着物联网、5G等技术的快速发展,边缘计算作为一种新兴的计算模式,正逐渐引起人们的广泛关注。边缘计算通过将数据处理和存储功能放置在距离数据产生源头更近的位置,实现了更快速、更可靠的数据处理和交换,为各行各业带来了前所未…...
php 各种魔术函数的触发条件
2024.3.20 1、__construct() __construct() 用于在创建对象时自动触发 当使用 new 关键字实例化一个类时,会自动调用该类的 __construct() 方法 <?php class MyClass {public function __construct() {echo "已触发 __construct 一次";} }$obj new …...

Linux的学习之路:2、基础指令(1)
一、ls指令 上篇文章已经说了一点点的ls指令,不过那还是不够的,这篇文章会介绍更多的指令,最起码能使用命令行进行一些简单的操作,下面开始介绍了 ls常用选项 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d…...

0103设计算法-算法基础-算法导论第三版
文章目录 一、分治法二、分析分治算法结语 我们可以选择使用的算法设计技术有很多。插入排序使用了增量方法:在排序子数组 A [ 1 ⋯ j − 1 ] A[1\cdots j-1] A[1⋯j−1]后,将单个元素 A [ j ] A[j] A[j]插入子数组的适当位置,产生排序好的子…...

[NCTF2019]SQLi ---不会编程的崽
欸嘿,继续sql注入。又是新的sql注入类型 很直接哦,给出了sql查询语句。简单扫描一下,robots.txt还能访问。里边提示hint.txt $black_list "/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00…...
上位机开发 halcon坐标转轴坐标
背景 上位机开发中有一种相机叫标定相机,主要是有来给某些要进行根据CAD图点位计算时当前产品实际点位坐标时使用的一种标定测量相机。主要原理是根据两个或多个指定的标定点进行取图计算圆心坐标,再将视觉计算出的圆心坐标和取图时的轴坐标进行偏差计算。最后得到标定点轴的…...

[数据结构]二叉树(下)
一、二叉树的节点和深度关系 1.满二叉树 我们可以假设二叉树有N个节点,深度为h我们可以恒容易得到满二叉树每行的节点数,然后错位相减,算出节点与高度的关系。 2.完全二叉树 注意我这个是因为最后一行的节点数为1。 二、向上调整建堆和向下调整建堆的时…...
动手学深度学习|notebook教程
D2L.AI|《动手学深度学习》Notebooks 目录 面向中文读者的能运行、可讨论的深度学习教科书 含 PyTorch、NumPy/MXNet、TensorFlow 和 PaddlePaddle 实现 被全球 70 多个国家 500 多所大学用于教学 github 下面是整理好的,可以直接运行的notebook 0 前…...
C#面:简述 .NET Framework 类库中的“命名空间”
在 C# 中,命名空间(Namespace)是一种用于组织和管理代码的机制。它提供了一种将相关的类、接口、结构体和其他类型组织在一起的方式,以便更好地管理和维护代码。 .NET Framework类库中的命名空间是一种逻辑上的分组,它…...
android.os.TransactionTooLargeException解决方案,Kotlin
android.os.TransactionTooLargeException解决方案,Kotlin 首先,特意制造一个让Android发生TransactionTooLargeException的场景,一个Activity启动另外一个Activity,在Intent的Bundle里面塞入一个大的ArrayList: import android.…...

ChatGPT智能聊天系统源码v2.7.6全开源Vue前后端+后端PHP
测试环境:Linux系统CentOS7.6、宝塔、PHP7.4、MySQL5.6,根目录public,伪静态thinkPHP,开启ssl证书 具有文章改写、广告营销文案、编程助手、办公达人、知心好友、家庭助手、出行助手、社交平台内容、视频脚本创作、AI绘画、思维导图等功能 ai通道:文心一言、MiniMax、智…...

汇丰:当前的美股是泡沫吗?
汇丰认为,当前的风险资产并不构成泡沫,更类似于2017年的市场环境,风险资产有望继续稳步上升。 隔夜美股飙涨,标普创三个月最大周涨,纳指收盘创历史新高。结合去年以来的强劲表现,有观点认为由科技股支撑的…...

颠覆传统:Web3如何塑造未来的数字经济
引言 近年来,随着数字化时代的到来,互联网已经成为人们生活中不可或缺的一部分。然而,随着技术的不断发展和社会的不断变迁,传统的Web2模式逐渐显露出一些弊端,如数据垄断、隐私泄露等问题,这促使人们寻求…...

iOS模拟器 Unable to boot the Simulator —— Ficow笔记
本文首发于 Ficow Shen’s Blog,原文地址: iOS模拟器 Unable to boot the Simulator —— Ficow笔记。 内容概览 前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱,问题也不少。😂 那就有病治…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...