- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深化理解Mysql执行过程及执行挨次
2021-08-28
更多内容关注:fullstack888
mysql在我们的开发中基本每天都要面对的,作为开发中的数据的来源,mysql担当者存储数据和读写数据的职责。由于学习和了解mysql是至关重要的,那么当我们在客户端发起一个sql到消灭具体的查询数据,这其中到底经受了什么样的过程?mysql服务端是如何处理恳求的,又是如何执行sql语句的?本篇博客将来探讨这个问题:
?一:mysql执行过程
mysql全体的执行过程如下图所示:
?1.1:连接器
连接器的次要职责就是:
①担任与客户端的通信,是半双工模式,这就意味着某一固定时辰只能由客户端向服务器恳求或者服务器向客户端发送数据,而不能同时进行,其中mysql在与客户端连接TC/IP的
②验证恳求用户的账户和密码能否正确,假如账户和密码错误,会报错:Access denied for user root@localhost (using password: YES)
③假如用户的账户和密码验证通过,会在mysql自带的权限表中查询当前用户的权限:
mysql中存在4个把握权限的表,分别为user表,db表,tables_priv表,columns_priv表,mysql权限表的验证过程为:
1:User表:存放用户账户信息以及全局级别(全部数据库)权限,打算了来自哪些主机的哪些用户可以访问数据库实例????Db表:存放数据库级别的权限,打算了来自哪些主机的哪些用户可以访问此数据库?????Tables_priv表:存放表级别的权限,打算了来自哪些主机的哪些用户可以访问数据库的这个表?????Columns_priv表:存放列级别的权限,打算了来自哪些主机的哪些用户可以访问数据库表的这个字段?????Procs_priv表:存放存储过程和函数级别的权限
2:先从user表中的Host,User,Password这3个字段中推断连接的ip、用户名、密码能否存在,存在则通过验证。
3:通过身份认证后,进行权限安排,依据user,db,tables_priv,columns_priv的挨次进行验证。即先检查全局权限表user,假如user中对应的权限为Y,则此用户对全部数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;假如为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;假如db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推
4:假如在任何一个过程中权限验证不通过,都会报错
1.2:缓存
? ? mysql的缓存次要的作用是为了提升查询的效率,缓存以key和value的哈希表方式存储,key是具体的sql语句,value是结果的集合。假如无法命中缓存,就连续走到分析器的的一步,假如命中缓存就直接前往给客户端 。不过需要留意的是在mysql的8.0版本以后,缓存被官方删除掉了。之所以删除掉,是由于查询缓存的失效格外频繁,假如在一个写多读少的环境中,缓存会频繁的新增和失效。对于某些更新压力大的数据库来说,查询缓存的命中率会格外低,mysql为了维护缓存可能会消灭肯定的伸缩性的问题,目前在5.6的版本中已经默认关闭了,比较推举的一种做法是将缓存放在客户端,功能或许会提升5倍左右
1.3:分析器
分析器的次要作用是将客户端发过来的sql语句进行分析,这将包括预处理与解析过程,在这个阶段会解析sql语句的语义,并进行关键词和非关键词进行提取、解析,并组成一个解析树。具体的关键词包括不限定于以下:select/update/delete/or/in/where/group by/having/count/limit等.假如分析到语法错误,会直接给客户端抛出特别:ERROR:You have an error in your SQL syntax.
比如:select *? from user where userId =1234;
在分析器中就通过语义规章器将select from where这些关键词提取和婚配出来,mysql会自动推断关键词和非关键词,将用户的婚配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库能否存在user表,同时假如User表中不存在userId这个字段同样会报错:unknown column in field list.
1.4:优化器
能够进入到优化器阶段表示sql是符合mysql的标准语义规章的并且可以执行的,此阶段次要是进行sql语句的优化,会依据执行方案进行最优的选择,匹协作适的索引,选择最佳的执行方案。比如一个典型的例子是这样的:
表T,对A、B、C列建立联合索引,在进行查
原创力文档


文档评论(0)