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的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...