MySQL的索引使用的数据结构,事务知识
一、索引的数据结构🌸
索引的数据结构(非常重要)
mysql的索引的数据结构,并非定式!!!取决于MySQL使用哪个存储引擎
数据库这块组织数据使用的数据结构是在硬盘上的。我们平时写的代码是存在内存里面,内存里面的数据结构,对于访问操作不敏感,(找数据的过程花费的时间多,但是真正用于访问的数据不多,硬盘上的数据操作,对于访问操作比较敏感,但是⚠️读写一个的硬盘
开销是远大于内存的,读写一次硬盘,差不多可以多些一万次内存了。
数据结构简单回顾,引入innodb💘💘💘
MySQL包含很多模块,
有的解析SQL,有的用于网络通信,有的存储数据结构->如:存储引擎,本质上就是代码中的一个模块(这里包含若干个代码文件····以及一大堆具体的代码)
✨✨✨最主流的存储引擎:innodb
索引用的数据结构我们也只介绍innodb
我们要先知道索引是为了查找!!!(查找快的才牛波一)
让我们简单的回顾一下数据结构的知识吧 (🌝 🌚 🌑正好学的次)
顺序表:尾插,随机访问很屌
链表:中间位置的插入删除很屌
栈和队列:特定位置的增删查改
二叉树->二叉搜索树->平衡机制的二叉树(红黑树)或许可以查找速度还是很屌的
堆:适合排序,找最大最小
哈希表:查找嘎嘎🐮牛波一(以后工作常用)
👲 👳 👷
那来看看哪个更适合呢
红黑树:插入,删除,修改,查询,-元素有序,可以处理范围查询
最大问题,红黑树会在元素比较多的时候变的很高->对应比较次数就会变得很多,每次比较都意味着硬盘IO操作!!!(很耗硬盘开销)
单单这几个数,他就已经树高变成这样了
哈希表:哈希表的问题是只可以精准查询,不能支持模糊查询,范围查询(哈希表需要通过给定的key,通过hash函数映射出一个具体下标,才能定位到具体位置)。
二、B树💓💓💓
那么索引(innodb引擎)到是用的什么数据结构呢?
为了数据库,大佬们专门搞了个数据结构叫B+树(其他存储引擎中可能用到hash(哈希表)作为索引->只能应对这种精准匹配自己的情况了
那么什么是B+树呢,那我们需要了解B树也叫(B-树。叫B杠树 不要当土狗😨)
B树的本质是一个N叉搜索树,一个节点可以保存多个key,N个key就可以延伸出n+1个分叉来,N个key划分出了N+1个空间,(4个数5个空间)如下图
注意:一个节点多个key和一个key 都差不多的硬盘开销
此时每个节点上,都可以保存多个元素,当总的元素个数固定时,相较于二叉搜索树,涉及到的节点总数大大降低,树高也大大降低了,B树和B+树高度远远小于红黑树,于是这么查询,硬盘的IO次数也就随之减少了。
对于B树插入和删除元素,就涉及拆封和合并的操作(比如,拆分是确认区间,合并是给他聚到一起)当然了一个节点也不可以无脑存key(就是数),要不然存的太多就要变成数组了,所以要把这个节点一部分key以树节点的方式重新组织。
如1,2,3,4,此时再加入个5,就有点多了,所以说此时就会把 1,2,3,4,5
拆分成如下图,保持当前节点的key始终不会太多,此时就会生出新的叶节点
B树不如B+树的一个点:B+树全集有叶子和非叶子,如果写元素存到每一个节点上,非叶节点占据空间比较大,从而无法从内存中缓存了。
补充一个小知识点(HashMap负载因子是多少 ‘0.75’,链表长度多少时候转化为红黑树 ‘8’ 但是首先HashMap不是哈希表,只是哈希表的一种表达方式,但是最好不要记参数,最好要根据实际情况。

三、B+树💚 💚 💚
B+树在B树的情况下,又做出了一些改进->针对数据库的场景展开的
1.B+也是二叉搜索树,但是N个key分出了N个区间,其中最后一个就是相当于最大值
2.父节点的key在子节点重复出现(而且是以最大值的身份)
看起来会有很多的元素,浪费空间,但实际上可以起到非常重要的作用(上面存在的,下面都有,叶子节点这一层,包含了整个数据的全集!)
3.把叶子节点,按照链表方式首尾相连,此时可以通过叶子节点之间的连接,快速找到上一个/下一个的元素)
四、B+树的优点产生的优势💞
1.特别擅长范围查询
2.所有的查询操作最终都会落在叶子节点,比较次数,是均衡的,查询时间是稳定的,还是那句话‘有时候稳定比快更好’,时快时慢,用户的体验会不好,慢点但是稳定才好。
3.在B+树中,叶子节点上是完整的数据全集(注意哈,1不是只代表1,而是代表ID为1的连接。如同 1 -张三-90分),因此表中的每一个数据的其他列都可以得到在叶子节点上,只存储构建索引的id就行(就相当于一个网址链接)
物理层面:不需要表格这样的数据结构,直接使用B+树来存储这个表的数据,‘表格’只是用户看起来这个像是个表格而已,此时,非叶子节点的存储空间消耗是非常小的!!!(叶子存在硬盘,非叶子可以存在内存中),此时,进行数据查询的时候,就可以通过内存来直接比较,从而更快速的找到叶子节点上的记录(进一步又减少了硬盘IO的次数)
五、事务的基本情况💖
什么叫事务呢?
假如说表balance(accountId,balance)
1 , 1000
2 , 1000
1号给2号转账500,分为两步,第一步给1账户扣500,给2账户+500,中间还不能有差错,不然用户脑袋气死了😡
执行的时候,肯定是不知道哪一步会失败,❗️❗️然后事务的本质是把多个操作,打包成一个操作完成的,让这个操作,要不我就全部完成,要不我就完全失败那种——原子性😃😃
⚠️⚠️完全失败不是说一个没做,而是说假如第一步做了,但是第二步失败了,他的选择是把第一步给还原回去。(这个还原我们也管他叫回滚)
如何实现回滚呢:只要把事务中执行的每个操作都记录下来(通过特定的日志,来记录数据库事务操作的中间过程),如果需要回滚,按照之前的操作的“逆操作”就可以了。
如:1号-500,2号+500
若执行第一步的过程中,如果程序崩溃了~此时,就要对第一步进行回滚~~
数据库会自动把第一步操作的修改还原回去,那么假如数据库挂了呢🌚重启了捏🌚
我们是通过日志,来记录事务执行的中间过程的,日志中的数据始终在硬盘上存在的。即便是数据库服务器重启~就会在启动之后,针对之前没回滚完成的情况,继续处理~
要么是全部成功,要么是一个都不执行。
事务->原子性->回顾->特定日志
六、事务的使用方式💘
开启事务:start transaction (下面就可以输入多个sql语句了 )
提交事务:commit。 (把这些SQL按照原子的方式进行执行)
手动出发回滚:rollback 手动触发回滚~~
一个事务务必以后两条操作结尾(当然了解命令即可,不会用这个命令,我们一般是使用代码去操作事务)

七、事务的基本特性(面试题,理解的去思考去记)💜 💜 💜
1.原子性:保证多个操作被打包成一个整体,要不全成,要不一个也不做。
2.一致性:事务执行之前,和事务执行之后,数据能对上,数据不能够太牛马离谱
3.持久性;事务这里的各种操作,都是持久生效最终写到硬盘上,即使关机,也不影响的
4.隔离性:并发执行事务时候,隔离性,会在执行效率和数据可靠之间做出权衡,隔离描述的是在同时执行的事务之间,相互的影响,隔离性越高,并发性越低,数据越可靠,性能也就越低。(下一篇会介绍并发的,家人们别急)
相关文章:
MySQL的索引使用的数据结构,事务知识
一、索引的数据结构🌸 索引的数据结构(非常重要) mysql的索引的数据结构,并非定式!!!取决于MySQL使用哪个存储引擎 数据库这块组织数据使用的数据结构是在硬盘上的。我们平时写的代码是存在内存…...
普及100Hz高刷+1ms响应 微星发布27寸显示器:仅售799元
不论办公还是游戏,高刷及低响应时间都很重要,微星现在推出了一款27寸显示器PRO MP273A, 售价只有799元,但支持100Hz高刷、1ms响应时间,还有FreeSync技术减少撕裂。 PRO MP273A的100Hz高刷新率是其最大的卖点之一&#…...
Java课题笔记~6个重要注解参数含义
1、[掌握]Before 前置通知-方法有 JoinPoint 参数 在目标方法执行之前执行。被注解为前置通知的方法,可以包含一个 JoinPoint 类型参数。 该类型的对象本身就是切入点表达式。通过该参数,可获取切入点表达式、方法签名、目标对象等。 不光前置通知的方…...
Windows Docker Desk环境时区问题导致的时间问题解决?
大多docker镜像为了保持镜像大小,采用了alpine linux。 但经常由于时区问题导致时间不准确,解决也很简单。 1.查看事件文件 cd /usr/share/zoneinfo 2.复制时区文件 将文件copy到 /etc/localtime 路径下即可(重庆时区,上海也…...
SpringBoot复习:(22)ConfigurationProperties和@PropertySource配合使用及JSR303校验
一、配置类 package cn.edu.tju.config;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component;Component ConfigurationPropertie…...
Spring IoC (控制反转)
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。…...
安卓下模拟渲染EGLImageKHR
创建AHardwareBuffer并填充颜色 AHardwareBuffer_Desc desc = {static_cast<uint32_t>(screenW),static_cast<uint32_t>(screenH),...
Spring MVC 框架学习总结
文章目录 初步认识 Spring MVC 框架 一、初识 Spring MVC 框架 二、 三、 四、 五、 六、 七、 八、 九、...
2、简单上手+el挂载点+v-xx(v-text、v-html、v-on、v-show、v-if、v-bind、v-for)
官网: vue3:https://cn.vuejs.org/ vue2:https://v2.cn.vuejs.org/v2/guide/ 简单上手: 流程: 导入开发版本的Vue.js <!--开发环境版本,包含了有帮助的命令行警告--> <script src"https…...
C++初阶语法——命名空间
前言:C,即cplusplus,顾名思义,是C语言promax版本,C兼容C语言。 C的诞生是因为贝尔实验室的本贾尼等大佬认为C语言的语法坑实在太多,拥有许多不足之处(比如命名冲突,)&…...
Axwing.878 线性同余方程
题目 给定n组数据ai, bi , mi,对于每组数求出一个xi,使其满足ai * xibi (mod mi),如果无解则输出impossible。 输入格式 第一行包含整数n。 接下来n行,每行包含一组数据ai , bi , mi。 输出格式 输出共n行,每组数…...
【Pytorch+torchvision】MNIST手写数字识别
深度学习入门项目,含代码详细解析 在本文中,我们将在PyTorch中构建一个简单的卷积神经网络,并使用MNIST数据集训练它识别手写数字。 MNIST包含70,000张手写数字图像: 60,000张用于培训,10,000张用于测试。图像是灰度(即…...
spring boot 集成rocketmq
集成Spring Boot和RocketMQ 在现代的微服务架构中,消息队列已经成为一种常见的异步处理模式,它能解决服务间的同步调用、耦合度高、流量高峰等问题。RocketMQ是阿里巴巴开源的一款消息中间件,性能优秀,功能齐全,被广泛…...
redis Hash类型命令
Redis中的Hash类型有多个常用命令可用于对Hash键进行操作。以下是一些常见的Redis Hash类型命令: HSET:设置Hash字段的值。 它将指定字段与相应的值关联起来,如果字段已经存在,则更新其值,如果字段不存在,…...
P1194 买礼物(最小生成树)(内附封面)
买礼物 题目描述 又到了一年一度的明明生日了,明明想要买 B B B 样东西,巧的是,这 B B B 样东西价格都是 A A A 元。 但是,商店老板说最近有促销活动,也就是: 如果你买了第 I I I 样东西࿰…...
oracle基础语法和备份恢复
Oracle总结 sql命令分类 1.DDL,数据定义语言,create创建/drop销毁 2.DCL,数据库控制语言,grant授权/revoke撤销 3.DML,数据操纵语言,insert/update/delete等sql语句 4.DQL,数据查询语言&am…...
【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数)
【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数) 文献参考 Pianosi, F., Wagener, T., 2015. A simple and efficient method for global sensitivity analysis based on cumulative distribution functions.…...
vue2过渡vue3技术差异点指南
基础点 reactive() 定义响应式变量(仅仅引用类型有效:对象数组map,set):reactive(),类似于data中return的数据 例子: import { reactive } from vueexport default {setup() {const state reactive({ count: 0 })function in…...
两个多选框(select)之间值的左右上下移动
<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>两个多选框(select)之间值的左右上下移动</title> </head> <script src"https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>&…...
【设计模式】——模板模式
什么是模板模式? 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...




