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一样不靠谱,问题也不少。😂 那就有病治…...
三步搭建QQ签名服务:Windows环境零代码部署指南
三步搭建QQ签名服务:Windows环境零代码部署指南 【免费下载链接】Qsign Windows的一键搭建签名api 项目地址: https://gitcode.com/gh_mirrors/qs/Qsign 问题引入:为什么需要自建QQ签名服务? 在开发QQ相关应用时,签名验证…...
4大核心价值解锁旧Mac潜能:OpenCore Legacy Patcher全方位升级指南
4大核心价值解锁旧Mac潜能:OpenCore Legacy Patcher全方位升级指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款…...
DeepSeek-OCR-2部署指南:Docker镜像开箱即用,无网络依赖保隐私
DeepSeek-OCR-2部署指南:Docker镜像开箱即用,无网络依赖保隐私 1. 项目简介 DeepSeek-OCR-2 是一个基于深度学习的智能文档解析工具,专门为解决文档数字化难题而设计。与传统的OCR工具只能提取纯文本不同,这个工具能够理解文档的…...
从ReaxFF产物数量演化到反应动力学参数提取:一个Python脚本的实践
1. ReaxFF模拟与反应动力学分析入门 当你第一次看到LAMMPS的fix reaxff/species输出文件时,可能会被密密麻麻的数据搞得头晕。这些数字背后其实藏着化学反应的全部秘密——就像化学反应的"黑匣子飞行记录仪"。我在分析酯类热解反应时,花了整整…...
SEO优化代码时应该注意哪些常见的性能问题_SEO优化代码时应该注意哪些内容重复问题
SEO优化代码时应该注意哪些常见的性能问题 在网站开发和优化的过程中,SEO(搜索引擎优化)是一个至关重要的环节。而在SEO优化过程中,代码的性能问题常常被忽视。实际上,优化代码不仅能提升网站的加载速度,还…...
Blue-Topaz主题新手入门指南:打造你的个性化Obsidian笔记环境
Blue-Topaz主题新手入门指南:打造你的个性化Obsidian笔记环境 【免费下载链接】Blue-Topaz_Obsidian-css A blue theme for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/bl/Blue-Topaz_Obsidian-css 还在为Obsidian默认界面单调而烦恼?…...
ComfyUI中的SVD模型避坑指南:文生视频常见问题与解决方案
ComfyUI中的SVD模型避坑指南:文生视频常见问题与解决方案 当你在ComfyUI中使用Stable Video Diffusion(SVD)模型进行文生视频创作时,可能会遇到各种意料之外的问题。这些问题往往会让创作过程变得坎坷,甚至让你怀疑自己…...
工业显示屏选购要点,接口兼容与长期稳定测试
采购设备用串口屏这些年,我经常要和各种品牌打交道。今天不谈那些华丽的宣传语,就用实际工作中的观察,聊聊恒域威这个品牌的显示屏在适配方面的一些特点,希望能给同行一些参考。从硬件接口到工作环境选串口屏,首先要看…...
tao-8k嵌入模型实战效果:基于Xinference的文本聚类与去重案例
tao-8k嵌入模型实战效果:基于Xinference的文本聚类与去重案例 1. 引言:从海量文本中快速找到“同类项” 想象一下,你手头有成千上万条用户评论、新闻摘要或产品描述。你想知道哪些内容是相似的,哪些是重复的,或者想把…...
Ubuntu家族大比拼:Gnome、KDE与Xfce桌面环境全解析
1. Ubuntu家族三剑客:Gnome、KDE与Xfce的定位差异 第一次接触Ubuntu系列发行版的朋友,往往会被各种"*buntu"搞得晕头转向。我自己刚入门时也分不清Kubuntu和Xubuntu的区别,直到把三个系统都装了一遍才发现:它们的内核和…...
