MySQL你必须知道的事
文章目录
- 前言
- 一、InnoDB的数据页,和B+树的关系?
- 二、为什么InnoDB三层B+树可以存2000w数据
- 三、什么是InnoDB的页分裂和页合并
- 四、什么是回表?怎么减少回表的次数?
- 什么是覆盖索引,索引下推?
- 覆盖索引
- 索引下推
- 总结
前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、InnoDB的数据页,和B+树的关系?
InnoDB数据页是InnoDB存储引擎存储数据的基本单位。它在磁盘上是一个连续的区域,通常大小为16KB,也可以通过配置修改。16KB意味着InnoDB一次读写都是以16KB为单位的,磁盘到内存的读取,内存到磁盘的持久化都是16KB

如图,非叶子节点存储的是主键id及页指针,叶子节点存的则是主键id和数据。如果是聚簇索引那么叶子节点就是主键id+整行数据,非聚簇索引叶子节点存的则是主键id+索引的值
二、为什么InnoDB三层B+树可以存2000w数据
由于InnoDB的一页大小是16KB如图,可以通过命令查看
show variables like ‘innodb_page_size’

在通常情况下就算是宽表最坏情况按一行数据1KB计算,那么一页可以存16行数据,对于非叶子节点上面说过存的是主键索引和下一个节点的指针。假如是bigint类型的索引,占8字节,mysql数据库中指针大小为6字节,那么一页中一个指针会占用14字节,16KB=16384字节,即16384/14=1170。证明一页可以存1170个指针。对于三层B+树根节点有1170个子节点,每个子节点可以存1170页数据行,就是1170117016= 21902400,大约就是2000w数据
三、什么是InnoDB的页分裂和页合并
众所周知B+树是按照索引字段建立的,并且是有序的。但是如图索引字段的值并不连续

假如我们现在要插入索引值为3,按顺序它应该插入到页20中且在1,2之间,如果此时页20已经满了,就需要触发一次页分离
页分裂是指将该页面的一部分索引记录迁移到新页面中,从而为新索引记录腾出空间,以此保证B+树的平衡和性能
如图为一次分裂过程:

有分裂就会有合并。当索引页面有数据删除时会使页面变得稀疏,此时为了节省空间和提升性能,可能会触发页合并操作。
页合并是值将相邻两个页面合并为一个更大的页面,减少B+树层级,从而提高查询性能
如图为一次合并过程:

四、什么是回表?怎么减少回表的次数?
在InnoDB中,索引B+树叶子节点存储了整行数据的是主键索引即聚簇索引。如果叶子节点存储的是主键索引的值就是非聚簇索引。
当我们根据非主键索引查询时,会先通过非聚簇索引拿到主键的值,之后还要通过主键索引的值再次查询得到我们需要的数据,这就是回表
在InnoDB中通过主键索引查询效率是很高的,此过程不需要回表。另外依赖覆盖索引,索引下推等技术,我们也可以通过优化索引结构和sql语句来减少回表次数。
什么是覆盖索引,索引下推?
覆盖索引
指一个查询语句的执行只需要从索引中就能获得,不需要在从数据表中获取,避免了查到索引在返回表中操作,减少I/O提高效率。
如表A,有一个普通索引 idx_a1_a2(a1,a2)
select a2 from A where a1=‘xxx’;
此时就实现了覆盖索引,不需要回表。
但是如下sql
select a1 from A where a2=‘XXX’;
因为不符合最左前缀匹配,虽然是索引覆盖,但是也无法用到索引。
但是如果sql中的查询不包含在联合索引中,那么就不会走索引覆盖,如:
select a2,a3 from A where a1=‘xxx’;
索引下推
索引下推是MYSQL5.6引入的一种技术,默认开启。
先看样例表

建立联合索引(name,level)
匹配姓名第一个字为“大”,并且level为1的用户,sql语句为
select * from user where name like “大%” and level = 1;
在5.6之前存储引擎先根据索引查询数据即通过name查到大王,大李。进行回表查询后返回给MySQL server层再筛选level=1的数据,回表次数为2。
5.6之后MySQL server会将索引列作为判断条件的传递给存储引擎。
即先查到大王,大李后筛选level=1,后在回表查询,次数为1
总结
如果没有索引下推优化(ICP优化)
首先根据索引查询记录,根据where过滤记录。
有了ICP优化,MySQL会取出索引的同时判断where条件是否能进一步过滤,在进行索引的查询。也就是说提前执行where的部分过滤操作,在某些场景下,可以大大减少回表次数,从而提升整体性能
相关文章:
MySQL你必须知道的事
文章目录 前言一、InnoDB的数据页,和B树的关系?二、为什么InnoDB三层B树可以存2000w数据三、什么是InnoDB的页分裂和页合并四、什么是回表?怎么减少回表的次数?什么是覆盖索引,索引下推?覆盖索引索引下推总…...
Ceph RBD使用
CephRBD使用 一、RBD架构说明二、RBD相关操作1、创建存储池2、创建img镜像2.1 创建镜像2.1.2 查看镜像详细信息2.1.3 镜像其他特性2.1.4 镜像特性的启用和禁用 3、配置客户端使用RBD3.1 客户端配置yum源3.2 客户端使用admin用户挂载并使用RBD3.2.1 同步admin账号认证文件3.2.2 …...
Spark MLlib模型训练—回归算法 Random forest regression
Spark MLlib模型训练—回归算法 Random forest regression 随机森林回归 (Random Forest Regression) 是一种集成学习方法,通过结合多个决策树的预测结果来提升模型的准确性和稳健性。相较于单一的决策树模型,随机森林通过随机采样和多棵树的集成,减少了模型的方差,从而在…...
华为OD机试真题-数大雁-2024年OD统一考试(E卷)
题目描述: 一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。具体的 大雁发出的完整叫声为”quack“,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个”quack”大雁会依次完整发出”quack”,即字符串中q,u,a,c,k这5个…...
Oracle数据迁移:导出与导入的详细指南
在数据库管理中,数据的导出与导入是一项常见的任务,无论是为了数据迁移、备份还是其他目的。Oracle数据库提供了多种工具和方法来实现数据的导出和导入。本文将详细介绍如何在Oracle中实现数据的导出和导入,包括使用Oracle SQL Developer、Or…...
SpringBoot实现前后端传输加密设计
在Web应用中,确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密,用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…...
X 射线测厚仪-高效精准,厚度测量的卓越之选
在现代工业的舞台上,对精准度和效率的追求从未停歇。而 X 射线测厚仪,宛如一颗璀璨的明星,以其高效精准的特质,成为厚度测量的卓越之选。 X 射线测厚仪,是科技与智慧的完美结晶。它凭借先进的 X 射线技术,…...
10款好用的文件加密软件排行榜|文件加密管理软件推荐(合集篇)
某企业在疫情期间实行远程办公政策,所有员工通过公司提供的VPN访问内部系统。为了保障数据安全,然而,某位员工为了加快工作进度,将文件下载到个人电脑上进行编辑。 在一次在线会议中,员工不慎将这份未加密的文件通过非…...
服务器蓝屏该怎么办
服务器蓝屏是一种常见但严重的问题,可能会导致系统无法正常工作和数据损失。遇到服务器蓝屏时,及时采取正确的措施至关重要。以下是处理服务器蓝屏的步骤: 1. 记录蓝屏错误信息 首先,记录下蓝屏错误代码和相关信息。这些信息通常显…...
Elasticsearch:使用 inference API 进行语义搜索
本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。 重要:有关在 Elastic Stack 中执行语义搜索的最…...
PVE开启核显直通
启用内核 IOMMU 支持 修改/etc/default/grub配置文件以启用 IOMMU 支持,将GRUB_CMDLINE_LINUX_DEFAULT修改为: GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon iommupt"iommupt的参数建议添加,以提高未直通设备 PCIe 的性能&am…...
使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍
简介 使用 AutoModelForSequenceClassification 导入Bert 模型。 很多教程都会自定义 损失函数,然后手动实现参数更新。 但本文不想手动微调,故使用 transformers 的 Trainer 自动微调。 人生苦短,我用框架,不仅可保证微调出的模…...
Obsidian git sync error / Obsidian git 同步失敗
Issue: commit due to empty commit message Solution 添加commit資訊,確保不留空白 我的設置:auto-backup: {{hostname}}/{{date}}/...
谷歌英文SEO外链如何做?
做英文SEO外链涉及多种策略和技巧,目标是提升目标网站的排名和流量,Google的搜索算法在不断演变,但外链一直是搜索引擎优化中重要的一环。有效的外链建设能够显著提升网站的SEO数据效果。关键在于创建一个多元化且自然的外链结构。不能仅仅依…...
vue使用Export2Excel导出表格
安装插件 npm install xlsx xlsx-style file-saver npm install node-polyfill-webpack-plugin (如果不安装的话后面使用会报错) 添加相关配置 在vue.config.js文件 const NodePolyfillPlugin require("node-polyfill-webpack-plugin") module.exports defineCon…...
Linux环境变量 本地变量 命令行参数
并行和并发 并行 多个进程在多个 CPU 下分别,同时进行运行。 并发 多个进程在一个 CPU 采用进程切换的方式,在一段时间内,让多个进程都得以推进,称之为并发。 CPU 中的寄存器扮演什么角色? 寄存器:cpu 内的寄存器里面保存的是进程…...
向量数据库Faiss的搭建与使用
1. 什么是Faiss? Faiss是由Facebook AI Research团队开发的一个库,旨在高效地进行大规模向量相似性搜索。它不仅支持CPU,还能利用GPU进行加速,非常适合处理大量高维数据。Faiss提供了多种索引类型,以适应不同的需求&a…...
微信小程序接入客服功能
前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…...
mysql开启远程访问
个人建议mysql可以用宝塔自动下载安装。 远程访问, 1.关闭防火墙,确保ip能ping通 2.ping端口确定数据库能ping通 3.本地先连上去命令行修改远程访问权限。 mysql -u root -p use mysql; select user,host from user; select host from user where u…...
【NLP自然语言处理】文本处理的基本方法
目录 🍔什么是分词 🍔中文分词工具jieba 2.1 jieba的基本特点 2.2 jieba的功能 2.3 jieba的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
