MySQL的索引和事务(事务的隔离一看就懂)

MySQL事务和索引 阅读详情

我也学了有一段时间的MySQL数据库了,但是之前的内容感觉没有什么有深入交流的地方(应该是我学的还浅),所以就没有什么写博客的兴趣,这个之前学的一些东西给我的感觉就是像我们的WPS一样,全部都是使用型,这种东西在我看来,就是看一遍,自己上手操作一下,记住就好的东西,所以就没有写博客的必要,但是现在的索引和事务才有一点写的想法(主要还是没有什么内容写,不然这个我感觉也没有什么写的必要),所以废话也不多说了,正题开始。

索引

我们先聊一聊索引,索引说白了,就是一种数据结构,只不过是MySQL使用这种数据结构,而数据结构,我们都知道就是为了方便我们查找,存储数据用的,所以索引就是在MySQL为了方便我们查找数据,存储数据的一种手段,接下来我们就看看,MySQL是怎么用索引来提高我们查询,存储数据的效率吧。

二叉搜索树

首先,我们就要提到二叉树,而我们知道在二叉树中,二叉搜索树的效率是很高的,但是她还是有一些缺点的,就比如在一些特定的情况下,他的查询效率是O(N),我们知道这个效率不算高,甚至算低了,2.节点一旦过多的时候,这个树是不是会很高啊,而这个树很高的话,我们想要访问到叶子节点,是不是就要进行更多的次的操作(我们把访问子节点时的操作叫为一个IO),而我们想要提高效率就要减少IO的值,所以在此基础上,我们提出了N叉树

N叉树

N叉树就是为了解决树高的问题,你想想,假如我们有32个节点,在二叉树中,我们要5层才放得下,而我们设为6叉树呢,最多3层,是不是明显降低了树高,但是MySQL认为这个N叉树做的还是差了一点(后面聊),所以MySQL就使用了B+树

B+树

其实B+树和N叉树是很像的,就是有一点不一样,就是数据全部在叶子节点上面,非叶子节点上面就算有也是假的,这个只是一个指向,指向真实的数据。所以我们看一个例子

 这个就是B+树。

我们来看看这个数有什么特别的地方,1.就是非叶子节点是引用(指向真实数据),2.在叶子节点中,我们可以找到全部的数据,并且成链表型(这样的特性使B+树,可以进行范围查找),3.全部数据在叶子节点上面,我们要进行的IO次数一样,所以查询的效率很稳定。这些也是B+树要好于N叉树的原因,而我们的每一个叶子节点里面就是存储MySQL的数据了,但是不是直接把数据存储进去,而是放在一个页中,而这个页是内存和磁盘交互的最小标准,默认为16KB(为什么,我也不知道,嘻嘻)

页

现在我们看看页是怎么存储数据的

这个图画的很清晰,我们从上往下看,首先是数据页头,而数据页头里面,我们不存储数据,是为了查找数据而存在的,所以我们他存储的数据就是

其实也很好理解,我们假如不设置这些东西,是不是一个页中就全部是数据,就像一个垃圾场,什么东西都往里面丢,找起来的时候就特别难,但是我们像这样对数据进行管理,就可以显著的提升效率,其实也就是用空间换效率的操作,接下来就是最大最小行,其实就是我们数据第一个数据和最后一个数据,有点意思的就是页目录了,这个就像我们看书,我们想找一个知识点,我们就可以先看目录,根据目录来判断这个知识点在什么范围,页目录也是一样,我们是用主键id值和槽中的值进行比较,从而判断范围。

我们在扩展一点就是一个三层的B+树可以存放多少数据,我们假设数据为1KB,我们忽略页头这些的消耗,所以一页就是16条数据,而我们叶子节点的大小也是16KB,一个主键是8ByTe(bigint),而下一个节点地址是6ByTe,所以一个主键和一个地址就是14ByTe,所以一个索引就可以保存16*1024/14 = 1170个节点,一共就是1170*1170*16 = 21902400条数据,你想想我们在这么多条数据中找到一条,我们只需要3次IO,所以这个性能真的太吊了。

事务

什么是事务,其实很简单,就是把我们要做的事打包一下,要不不做,要不全部做完,(人生也是一样,要不就一直努力,不断超越极限,杀到九天十地无人敢称尊,要不就一直躺平,就怕高不成低不就,但是事实就是,就算我们拼尽了一切,我们还是无法有所成就,而我唯有两字——坚持,我很喜欢一句话,我清楚的知道人与人的路是不可复制的,我走在自己的人生道路上,哪怕路途的风雨再大,大到我步履维艰,哪怕荆棘丛生,刺的我伤痕遍地,我也依旧痴痴笑笑,我体会此中滋味,所以朋友不必后悔,因为你怎么选择,都是你自己的人生道路啊)偏题了,我们开始聊事务,就比如说转钱,你给我100块(自愿啊),是不是你微信就少100,而我微信就多100,我们把这些包起来就是一个事务,我们来看看事务的4个特性

事务的ACID特性指的是 Atomicity (原⼦性), Consistency (⼀致性), Isolation (隔离 性)和 Durability (持久性)。

我们不看定义,我们根据那个例子来理解,1,原子性就是要不全部成功,要不全部不成功,假如不成功就返回到开始的样子,因为总不能,你转钱给我,你转出来了,而我没有收到吧。

2,一致性,转钱之前,假如你和我都是1000块,我们两个加起来就是2000,而转钱之后你900,我1100,加起来还是2000,这个就是一致性。

4.持久性,事务处理完了,我们就会把他写入存储介质,保存起来。

3.隔离性(最后写是因为,这个才是我要写的原因(有点意思))

 READ UNCOMMITTED ,读未提交

 READ COMMITTED ,读已提交

 REPEATABLE READ ,可重复读(默认)

 SERIALIZABLE ,串⾏化

这个是隔离的四个标准,假如我用数据来举例子感觉有点枯燥,所以我就以玩具来举例子。

假如说你和我是好朋友,我们有很多玩具,我在玩变形金刚的时候,你也想玩,所以我和我都一起在玩变形金刚,我把变形金刚的头拔掉了,是不是你手上的变形金刚头也没有了(因为我们玩同一个)(这个样子就是读未提交,我随便改数据,你同时也可以随便改数据,),你可能就觉得我是个sb,所以你不想要我玩你手上的变形金刚,所以我要玩,你就和我打架,但是我还是想我,但是我打不过你,所以我就等你玩完了,我再玩,假如我把变形金刚的脚拔掉了,你下次玩的时候,是不是脚的没了(玩具还是同一个,但是时间不同)(这个就是读已提交,提交就是相当于你不玩了,你提交了,我再玩,但是你下次玩的时候,其实是我玩剩下的)(这个也叫不可重复读,因为第二次读的不一定是一样的)你看到,变形金刚脚又没了,你很生气把我打了一顿,说:“你不可以玩这个玩具,你玩了,我就打你”(你是霸道总裁),我打不过你,所以我就再也没有玩过这个了,但是我可以玩别的玩具啊,所以我就开始玩飞机了,(这个就是可重复读,你使用的这个小包没事,但是在同一个大包的其他小包,就可能有问题,在上面的情节就是我和你玩你家的玩具(不止一个),我不玩变形金刚了,我玩你家的飞机),最后一个串行化就是你把玩具卖了,我在买回来玩(就是你全部操作完成,我再操作)

你想想我们的隔离程度再一步一步的提高,因此付出的代价是效率一步一步的降低,所以我们要选择最合适的。

欧克,喜欢的朋友就喜欢吧(都看到这了,还不点赞,过分了啊)

【MySQL系列】MySQL索引事务 MySQL数据库 索引和事务部分的内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 阅读详情

相关推荐

MySQL的索引和事务

就是将一系列SQL语句装在一起然后一起去执行。像这样子若在减少的时候出现错误那么就会开启回滚让它的数据恢复过来(它就没有减两百元)让人感觉它是没有执行的其实它早已执行完毕当开启事务时它是还没有将这些SQL语句装在一起没有体现它的第一大特点。

2301_80334329的博客 1819

MySQL数据库——事务和索引

什么是事务: 事务是逻辑上的一种操作,要么都成功,要么都失败! —————————————————————————————————— 1、SQL执行 A:1000元 ——>转账200元 B:200元 2、SQL执行 A:800元 ——> B:400元 —————————————————————————————————— 将一组SQL放在一个批次中执行 事务四大特性: ACI...

龍弟-idea的博客 7034

Mysql-事务和索引

无索引情况在无索引情况下,就需要从第一行开始扫描,一直扫描到最后一行,我们称之为全表扫描,性能很低。有索引情况如果我们针对于这张表建立了索引,此时我们在进行查询时,只需要扫描几次就可以找到数据了,极大的提高的查询的效率。

马朋帅的博客 784

MySQL的索引与事务

MySQL的索引与事务

chenchenchencl的博客 4080

银河麒麟V11 + KVM/QEMU + GT 710 GPU直通 Win10 完整操作流程文档

宿主机:RTX 5080专门运行ollama大模型服务,通过SSH/VNC远程管理Win10虚拟机:GT 710直通,物理键盘专属,通过物理显示器处理视频应用硬件隔离:两个系统完全隔离,互不干扰,性能最大化两种不同的直通方式直通方式 配置方法 设备在宿主机的状态 典型应用场景PCIe设备直通 vfio-pci.ids=10de:128b,10de:0e0f 设备完全从宿主机消失,被vfio-pci驱动接管 GPU、网卡、NVMe硬盘。

weixin_45285654的博客 1151

深入解析PCIe Retimer:工作原理与典型应用场景

本文深入解析了PCIe Retimer的工作原理与核心价值。作为高速信号的中继再生器,Retimer通过时钟数据恢复和信号再生技术,有效解决长距离或复杂通道中的信号衰减与完整性问题,从而极大地扩展了PCIe链路的有效传输距离。文章详细阐述了其内部架构、自动与手动两种工作模式,并重点介绍了在长距离板间互连、复杂背板设计等典型应用场景中的关键作用。

weixin_29195615的博客 504

【MYSQL】索引和事务

本文主要介绍MySQL中的索引和事务,介绍索引的作用和使用,以及背后的数据结构,同时,介绍事务的概念,使用,特性以及带了的三个问题和隔离性级别。

爱编程爱运动的博客 4039

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash

七、从0开始卷出一个新项目之瑞萨RZN2L 2.2.2 启动模式和flash。

cl234583745的博客 1466

MySQL性能调优(八):事务和事务的隔离级别(事务特性、事务并发问题、隔离级别、MySQL事务)

每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务。我们将连老师向李老师同时进行的两次转账操作分别称为T1和T2,在现实世界中T1和T2是应该没有关系的,可以先执行完T1,再执行T2,或者先执行完T2,再执行T1,结果都是一样的。连老师借给李老师生活费,借了两次,每次都是1000,连老师的卡里开始有10000,李老师的卡里开始有500,从理论上,借完后,连老师的卡里有8000,李老师的卡里应该有2500。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 4万+

深入浅出:.sh文件在Linux系统中的实战应用与技巧

本文深入浅出地介绍了.sh文件在Linux系统中的实战应用与技巧。从基础概念入手,详细讲解了Bash脚本的运行方法、权限管理,并通过编写自动化备份脚本等实例,展示了如何利用Shell脚本提升工作效率。文章还涵盖了脚本调试、错误处理以及函数、参数解析等进阶技巧,帮助读者从入门到精通,掌握这一强大的自动化工具。

weixin_29243279的博客 346

超详细!新手必看STM32-DMA配置与实验(串口使用DMA发送数据)

DMA就是:直接存储器访问。DMA传输数据从一个地址空间复制到另一个地址空间,提供在外设和存储器或者存储器和存储器之间的高速数据传输。

qq_1033275663的博客 2万+

【MySQL】索引和事务

事务是数据库操作的逻辑执行单元,这些操作要么全部实现,要么全部失败回滚。为的就是保证数据的一致性和完整性。事务必须满足四个特性(ACID)原子性事务是一个整体,要么全部成功要么全部失败回滚,例如转账时A账户扣钱和B账户加钱必须同时成功。一致性执行前后,数据库状态要保持一致,如转账后两个账户总金额不变。隔离性多个事务并发执行,彼此间的操作不能互相干扰持久性事务一旦提交,结果就是永久性的,即使系统崩溃数据也不会丢失。

2401_86449430的博客 1416

【webrtc】openh264编码:动态配置码控参数触发IDR编码

SetRates 下发RateControlParameters 给到openh264 编码器 void SetRates(const RateControlParameters& parameters) override; LayerConfig 编码器这边的配置是layerconfig,具体到层的: std::vector<LayerConfig> configurations_; void H264EncoderImpl::SetRates(const RateCo.

突围 723

MySQL索引和事务

索引与事务是 MySQL 性能与数据可靠性的核心支柱。通过掌握高级索引优化技巧、事务处理机制及性能监控方法,开发者能够设计出高效、稳定的数据库系统。随着数据库技术的发展,未来索引结构(如列式索引、自适应索引)和分布式事务方案将进一步提升系统的扩展性与可用性。在实际开发中,需结合业务场景不断实践与优化,充分发挥 MySQL 的强大能力。

2501_91112123的博客 1143

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 497

Unreal 从入门到精通之VR常用操作

本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。

TxNet 951

【MySQL】mysql索引和事务(面试经典问题)

如有错误,欢迎指出~

2301_80898480的博客 1543

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MySQL索引和事务 事务隔离级别

Mysql学习笔记

m0_62434717的博客 728

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

mysql索引和事务

IO Cost 表示引擎层 IO 的开销,MySQL 8.0 可以通过区分一张表的数据是否在内存中,分别计算读取内存 IO 开销以及读取磁盘 IO 的开销。CPU Cost 表示计算的开销,比如索引键值的比较、记录值的比较、结果集的排序……这些操作都在 Server 层完成;根据read view中的事务id和undolog中数据的版本事务id比较,最后得出可以读取的数据。优化器(CBO 基于成本的优化器)开销。图片来源:小林coding。默认的查询都是快照读,(,后续如果其他事务使用。

hsnsnusjs的博客 4300

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【MySQL】MySQL索引与事务

索引属于是针对查询操作引入的优化手段。可以通过索引来加快查询的速度,避免针对表进行遍历。数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。索引所起的作用类似书籍目录,可用于快速定位、检索数据。索引是通过一定的数据结构来实现的。哪些数据结构能加快查询的速度,B+树,为数据库量身定做的数据结构。事务的本质就是把多个sql语句给打包成一个整体,要么全部执行成功,要么全部执行失败。而不会出现"执行一半"这样的中间状态。

小黑屋的黑小子的博客 2375

Mysql索引和事务优化

索引是通过某算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索引,mysql必须从第一条记录开始读完整个表,直到找到相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,mysql能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么会节省很大一部分时间.1,单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引;2,普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。​。

weixin_63136174的博客 2710

【Mysql】事务与索引

多条sql语句,要么全部成功,要么全部失败。

2301_79456272的博客 1175

MySQL事务和索引原理

如果查询所需要的字段都能在一个索引中直接获取,就不需要回表,这种索引称为。

2301_81948543的博客 1094

MySQL的事务,函数和索引

数据库的事务是一种机制,一种操作序列,包含了简单了解:如果一个包含多个步骤的业务操作,被业务管理,要么这些操作事务是一个不可分割的工作逻辑单元,可以在事务中写多种sql语句。

luosuss的博客 1161

MySQL索引事务

MySQL索引事务

qq_61688804的博客 942
上一篇: 二叉树的面试题
下一篇: 多线程从认识到理解到使用(Java)
star050913
博客等级 码龄3年 277粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值