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的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...
Unpoly表单处理终极教程:实时验证与乐观渲染实践
Unpoly表单处理终极教程:实时验证与乐观渲染实践 【免费下载链接】unpoly Progressive enhancement for HTML 项目地址: https://gitcode.com/gh_mirrors/un/unpoly Unpoly是一个强大的渐进式增强HTML框架,能够显著提升Web应用的表单处理体验。通…...
AI Agent进阶必学:Harness是什么?与Framework的核心区别+实战拆解
最近 Claude Code、Cursor、OpenClaw 等 AI Coding Agent 刷屏朋友圈,大家发现:模型越来越聪明,但 Agent 却经常“半途而废”——上下文爆炸、状态丢失、安全翻车……问题的根源不在模型,而在模型外面的那层“外壳”——Harness。…...
Windows 11 + Python 3.10 下,用智谱GLM-4-Flash API零成本跑通DB-GPT(保姆级避坑指南)
Windows 11 Python 3.10 下零成本跑通DB-GPT全流程指南 最近发现不少朋友对DB-GPT这个开源项目很感兴趣,但被复杂的部署流程和硬件要求劝退。作为过来人,我完全理解这种困扰——去年第一次尝试时,光是处理依赖冲突就花了整整两天。不过现在…...
Carsim+Simulink 线控制动系统BBW-EMB联合仿真模型 !BBW-EMB线控制动联合仿真|Carsim+Simulink】
CarsimSimulink 线控制动系统BBW-EMB联合仿真模型 !BBW-EMB线控制动联合仿真|CarsimSimulink】 ✨ 核心仿真配置 ✅ 完整系统架构:包含制动力分配功能四个车轮独立线控制动机构,贴合真实线控制动系统结构; ✅ 精准控制…...
SEO查询优化如何优化网站内链_SEO查询优化如何优化网页标题和描述
SEO查询优化如何优化网站内链 在当今竞争激烈的互联网环境中,如何提升网站的搜索引擎排名成为每一个网站运营者的首要任务。SEO查询优化不仅仅涉及到外链和关键词,网站内部的链接结构同样起到重要的作用。本文将深入探讨如何通过优化网站内链来提升网站…...
Neomake Makers深度解析:如何为50+编程语言配置lint规则
Neomake Makers深度解析:如何为50编程语言配置lint规则 【免费下载链接】neomake Asynchronous linting and make framework for Neovim/Vim 项目地址: https://gitcode.com/gh_mirrors/ne/neomake Neomake是Vim/Neovim的异步代码检查框架,它通过…...
G-Helper华硕笔记本控制中心:告别臃肿,拥抱极致轻量化
G-Helper华硕笔记本控制中心:告别臃肿,拥抱极致轻量化 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF…...
告别重复操作:MaaYuan让《代号鸢》游戏管理效率提升80%
告别重复操作:MaaYuan让《代号鸢》游戏管理效率提升80% 【免费下载链接】MaaYuan 代号鸢 / 如鸢 一键长草小助手 项目地址: https://gitcode.com/gh_mirrors/ma/MaaYuan 您是否每天花费1小时以上在《代号鸢》或《如鸢》中完成重复日常任务?MaaYua…...
HR 人才库管理全解:从搭建到激活的实操指南
人才是企业发展的核心资源,HR 人才库管理作为人力资源管理的重要环节,是企业沉淀、激活与复用人才资源的关键手段。传统人才管理模式下,信息分散、检索低效、资源沉睡等问题普遍存在,难以支撑企业高效招聘与长期人才储备需求。 系…...
有限元分析避坑指南:四边形等参元高斯积分计算中的5个常见错误
有限元分析避坑指南:四边形等参元高斯积分计算中的5个常见错误 有限元分析作为工程仿真领域的核心技术,其精度和效率直接影响产品设计的可靠性。在众多单元类型中,四边形等参元因其良好的适应性和计算效率被广泛应用,但高斯积分环…...
