瞎说系列——Mysql update的执行过程
要了解mysql update语句的执行过程,首先要了解一下mysql是如何进行数据的操作的。
首先,数据库中的数据存在哪?肯定是文件系统,磁盘上对吧。那么思考一下,每次查询都从磁盘上去查找吗?
答案肯定是No,因为磁盘读写太慢了,没有人受得了。
那存在哪里好一点呢?没错,就是内存,内存的读写速度肯定是高于磁盘的,但是全部写在内存?那肯定也不可能,千万级别的数据全在内存,恐怕超级计算机也不够用吧。
如果让你来设计,你会怎么设计呢?
假如在库中有一百万条数据,每一次操作都要到磁盘上查找,然后再读取内容返回,那效率肯定不高,并且有的数据可能经常被查询,看到这里你觉不觉得熟悉呢?像不像计算机的缓存机制呢?对于某些命中率较高的数据放到内存中,当查询这些数据时,可以直接从内存中读取而不用读取磁盘,可以大大提高查询效率。没错,实际上数据库也是类似这样操作的,就是我们熟称的缓存机制。
在mysql中,内存和磁盘的交互式以页的单位交互的,对于无论是修改还是删除操作,第一步都是先查询到对应的记录,因此,在执行update 操作时,第一步是在内存中查询对应记录,如果没有找到对应记录,则先通过索引找到对应数据所在位置并加载到内存中,第二步就是执行修改操作,修改内存中对应数据的值。这样,当收到新的查询请求时,mysql会在内存中查找到最新修改的值。至此,修改的操作算是完成了,但是细心思考了的同学肯定要发问了,那磁盘里的值什么时候更新呢?这就和接下来要说mysql的运行方式有关了
熟悉mysql的同学都知道,在mysql有一个概念叫做事务,是为了防止有些原子性质的操作因为某些因素执行到一半而导致数据出现异常,当出现异常的时候,一般是需要进行回滚的,也就是恢复到这个操作之前的数据。那么这和我们的update又有什么关系呢?有关系,因为前面说了,我们的update是更新数据到内存中,并没有直接更新到磁盘,其实是因为mysql在维护这段内存时,会将内存分为两部分,一部分是已写的,一部分是可用的,当可用内存不足的时候,mysql会自动执行提交操作,将内存中的数据写到磁盘中,当然,手动执行commit操作也会触发mysql将内存信息写入磁盘,当内存中更新的值被写入到磁盘以后,update操作才算是真正的执行完成了
瞎说系列——Mysql update的执行过程相关推荐
- MySQL update正在执行中突然断电,数据是否更改成功?
今天有个朋友突然问到我这个问题,当我们的update语句执行过程中,服务器突然断电了会发生什么?其实这个问题主要在于对mysql update生命周期的理解,以及了解mysql 的redolog和bi ...
- MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程 [转]
MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程 五月 15, 2012 by admin · 14 Comments 导读: 2012年5月12日,MySQL技术群-北京技术圈的MySQ ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)
开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:"快跑啊!!楼主来了!" 母牛说:"楼主来了关我屁事啊?" 公牛急忙说:"楼主吹牛逼呀!&qu ...
- Mysql查询语句执行过程及运行原理
Mysql查询语句执行原理 数据库查询语句如何执行? DML语句首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树. 语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用 ...
- mysql中一条update的执行过程
一.Server层阶段: 连接器:负责跟客户端建立连接.获取权限.维持和管理连接 分析器:验证通过以后,分析器会对该语句分析, 判断是否语法有错误等. 优化器:选择索引,生成执行计划. 执行器:根据优 ...
- mysql执行一条sql语句的完整过程,sql语句在mysql中的执行过程
文章目录 1. SQL语句在mysql的执行过程 一:客户端层 二:mysql服务器层 三:innoDB引擎层 2. undo日志.redo日志.binlog日志的区别? 1. SQL语句在mysql ...
- MySQL——update 语句执行流程
图1 update语句执行流程 从 Buffer Pool(内存中) 中查看是否有这条数据,没有就从磁盘中加载到缓冲池,然后对这行记录加独占锁: 把更新行记录的旧值写入 undo log(以便回滚): ...
- 【MySQL】一条查询语句在MySQL内部的执行过程
我们几乎每天都在写SQL语句,当我们写了一条查询语句,会得到一个查询结果,但是它在MySQL内部是怎样的一个执行过程呢? mysql> select * from T where Id = 10 ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
最新文章
- UILabel 使用 标签,圆角,富文本
- 汇编:CF(carry flag)标志位
- python dict根据value找对应的key_一个不得不了解的Python库——collections
- Ubuntu16.04安装Xtion驱动并测试使用
- xcode项目集成CocoaPods
- python3.7游戏_python3.7+django环境搭建
- 腾讯初探AI+农业 获国际AI温室种植大赛亚军
- 通用Makefile实现
- 143. 最大异或对
- mikrotik dhcp server
- redis图形化界面_Redis(六)- Client
- Gephi绘制网络图初步探索
- 2018年人工智能之自动驾驶研究报告
- 操作 神通数据库_神通数据库安装及使用手册
- Cisco Packet Tracer 命令大全 【思科交换机模拟器命令大全】
- 【嵌入式04】用寄存器HAL库完成LED流水灯程序
- 袭扰战术_战术十必不可少的八
- switch 语句的参数类型
- vimperator
- 阿里云相关配置和参数
热门文章
- 一看就会一做就废系列:说说 RECOVER DATABASE(上)
- 京东金融信贷需求预测机器学习竞赛--代码重构--特征工程
- ANDORID~支持的设备
- 微型计算机三包规定新版内容,微型计算机三包规定
- Android之高仿手机QQ聊天
- Android保活黑科技的技术实现,在阿里工作5年了
- Android 7.1 GUI系统-BufferQueue 的管理(三)
- java实现游戏道具购买_基于jsp的虚拟游戏交易-JavaEE实现虚拟游戏交易 - java项目源码...
- PDF打印反应非常慢
- wap 设计的基本原则