sql的实行流程

打印 上一主题 下一主题

主题 525|帖子 525|积分 1575

实行过程分成两层,一层是server层,重要举行毗连服务,和分析语句,实行sql
详细流程是 首先与用户通过毗连器创建毗连,然后将sql查询语句在查询缓存中查找,如果查找处置处罚过相同的语句将,直接返回数据,给毗连器,进而返回给用户,如果没有查到,则将sql语句发送给解析器,解析器中有词法分析和语法分析,通过这两个分析过程,创建对应的sql语法树,然后实行sql查询语句流程,首先颠末预处置处罚,优化器,实行计划,末了通过实行器,创建和存储引擎的毗连
第二层是存储引擎层,当通过实行器将处置处罚好的sql语句传到innodb引擎后,举行引擎内部的处置处罚,末了返回查询结果,给实行器你,实行器将返回的记载发送给毗连器。
详细分析每一个步骤都做了什么
毗连器

首先实行 mysql -h -u -p 毗连服务,毗连过程需要颠末TCP三次握手,因为Mysql是基于TCP协议举行传输的,创建完TCP毗连后要开始验证用户名和密码,一个mysql服务可以被多个客户端毗连,但是不是每个客户端都是一直请求服务的,但是如果长时间保持这个客户端的毗连,会占用资源,mysql设置了最长的空闲链接保持时间,就是八小时,也可以手动关闭空闲毗连利用 kill connection + id 的方式,mysql的毗连数量也有限制,默认为最大毗连数量是151 ,mysql的毗连和http一样都有长短毗连之分,长链接的好处是可以减少创建毗连和断开毗连的过程,以是一般利用的是长链接,但是mysql在实行查询过程中临时利用内存管理毗连对象,这些毗连对象只有在断开毗连才会释放,如果存在的长链接很多,则会导致mysql占据大量内存空间,解决这个题目,可以从两个方面入手,一定期断开长链接,二客户端主动重置毗连
查询缓存

就是将之前实行的select语句查询的结果利用键值对的方式保存下来,键是sql语句,值是结果,但是这个缓存结果,会因为如果这个表中的数据更改了,就就会出发缓存清空
MySQL 8.0 版本直接将查询缓存删掉了,也就是说 MySQL 8.0 开始,实行一条 SQL 查询语句,不会再走到查询缓存这个阶段了。
对于 MySQL 8.0 之前的版本,如果想关闭查询缓存,我们可以通过将参数 query_cache_type 设置成 DEMAND。
解析SQL

在正式实行 SQL 查询语句之前, MySQL 会先对 SQL 语句做解析,这个工作交由「解析器」来完成。
解析器

由两部门组成
词法分析器:
mysql会根据输入的字符串识别出关键字出来,比方sql语句 select username from userinfo ,在分析之后,会得到四个token,其中两个keyword,分别是select ,from
语法分析:
语法分析。根据词法分析的结果,语法解析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法,如果没题目就会构建出 SQL 语法树,如许方便后面模块获取 SQL 类型、表名、字段名、 where 条件等等

实行SQL

实行sql重要分成 ,预处置处罚阶段,优化阶段,实行阶段
预处置处罚器
1.查抄sql查询语句中的表或者字段是否存在
2.将select * 中的*符号,扩展为表上的所有列;
优化器
颠末预处置处罚阶段后,还需要为sql查询语句先指定一个实行计划,优化器就是用来完成这个的。
优化器重要负责将sql查询语句的实行方案确定下来,好比表内里有多个索引的时间,优化器会基于查询成本的思量,来决定利用那个索引。
实行器
经历完优化器后,就确定了 实行方案,接下来mysql就真正开始实行语句了,这个工作是有实行器完成。在实行的过程中,实行器就会和存储引擎交互,交互是以记载为单位的。
总得来说一条查询语句的实行过程可以如许讲:首先毗连器和客户端创建毗连,毗连的创建就是利用的tcp创建毗连,三次握手,然后利用的是长链接的方式创建毗连,为了制止长链接带来的恒久占用内存资源题目,利用定期断开毗连的方式和客户端主动重置毗连的方式,空闲毗连最多保持8个小时,最多可以毗连151个。然后如果是select语句则还会颠末查缓存的方式,查看缓存中是否有保存的数据,查缓存在mysql8.0后取出了,因为没啥用。然后就是实行分析器,分析器首先举行词法分析,就是找出语句中利用的关键字,然后举行语法分析,就是利用词法分析的结果构建语法树,方便后面举行模块化处置处罚。然后就进入了实行sql过程,实行sql过程分为三个部门,预处置处罚部门,就是将select中的*号变成列中的所有表名和查抄sql查询语句中的表明是否都存在,接着进入优化器阶段,优化器会根据语句中的情况,选择代价最小的方式实行语句,好比选择合适的键举行索引查询,末了到了实行阶段,根据实行计划实行 SQL 查询语句,从存储引擎读取记载,返回给客户端

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表