深入理解 MySQL 执行过程及执行顺序.docx
《深入理解 MySQL 执行过程及执行顺序.docx》由会员分享,可在线阅读,更多相关《深入理解 MySQL 执行过程及执行顺序.docx(11页珍藏版)》请在第一文库网上搜索。
1、深入理解MySQL执行过程及执行顺序MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责。因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个SQL到出现详细的查询数据,这其中究竟经历了什么样的过程? MySQL服务端是如何处理请求的,又是如何执行SQL语句的?本篇博客将来探讨这些问题。MySQL执行过程MySQL整体的执行过程如下图所示:1 .更新记5HD=2这行Server 层命中则直接返回结果3.查询缓存十2.连接器3.分析器4.优化器管理连接,权限验证词法/语法分析执行计划生成.索引选择操作引掌.返回结果5.执行器引擎
2、层6,写undo log存储回法段指舒和事务2通过回滚段指计找到对应的C通过事务来判断记录的可夕undolog可以回滚/崩澹恢复7.记录所在的目标页存在于内存中唯一索引唯一索引普通索引8.将数据页从磁盘读入内存f判断冲突与否,更新8.找到数据更新内存8.找到数据判断数据冲突与否更新内存9.写入redo logWAL用于事务崩溃恢复以及将鳍机写变成顺序写提高性健10.写binlog用于备份/主从同步11.提交事务12.刷redo log 盘处于commit,prepare 阶连接器连接器的主要职责就是:1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器
3、向客户端发送数据,而不能同时进行,其中MySQL在与客户端连接TC/IP的。2、验证请求用户的账户和密码是否正确,如果账户和密码错误,会报错:Accessdenied for user rootlocalhost (using password: YES)3、如果用户的账户和密码验证通过,会在MySQL自带的权限表中查询当前用户的权限。MySQL中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv 表:user表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例db表:存放数据库级别的权限,决定了来自
4、哪些主机的哪些用户可以访问此数据库tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段MySQL权限表的验证过程为:1、先从user表中的Host, User, Password这3个字段中判断连接的IP、用户名、密码是否存在,存在则通过验证。2、通过身份认证后,进行权限分配,按照user, db, tables priv, columns priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y
5、,将不再检查db, tables_priv, columns_priv;如果为N,贝IJ至IJ db表中检查此用户对应的具体数据库,并落至IJ db中为Y而权限;如果db中为N,则检查tables priv中此数据库对应的具体表,取得表中的权限Y,以此类推。另外,搜索公众号编程技术圈后台回复“算法心得”,获取一份惊喜礼包。3、如果在任何一个过程中权限验证不通过,都会报错。缓存MySQL的缓存主要的作用是为了提升查询的效率,缓存以key和value的哈希表形式存储,key是具体的SQL语句,value是结果的集合。如果无法命中缓存,就继续走到分析器的这一步,如果命中缓存就直接返回给客户端。不过需
6、要注意的是在MySQL的&0版本以后,缓存被官方删除掉了。之所以删除掉,是因为查询缓存的失效非常频繁,如果在一个写多读少的环境中,缓存会频繁的新增和失效。对于某些更新压力大的数据库来说,查询缓存的命中率会非常低,MySQL为了维护缓存可能会出现一定的伸缩性的问题,目前在5. 6的版本中已经默认关闭了,比较推荐的一种做法是将缓存放在客户端,性能大概会提升5倍左右。分析器分析器的主要作用是将客户端发过来的SQL语句进行分析,这将包括预处理与解析过程,在这个阶段会解析SQL语句的语义,并进行关键词和非关键词进行提取、解析,并组成一个解析树。具体的关键词包括不限定于以下:select/update/d
7、elete/or/in/where/group by/having/count/1 imit 等。如果分析到语法错误,会直接给客户端抛出异常:ERROR: You have an error in yourSQL syntax.”。比如:select * from user where userid =1234;在分析器中就通过语义规则器将select from where这些关键词提取和匹配出来,MySQL会自动判断关键词和非关键词,将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在user表,同时假如user表中不存在userid这个字段同样会报错:u
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入理解 MySQL 执行过程及执行顺序 深入 理解 执行 过程 顺序