手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

MySQL查询语句的内部执行流程

[日期:2020-05-15] 来源:Linux社区  作者:yshengt [字体: ]

MySQL 由 Server 层和引擎层两部分组成。Server 层包括连接器、查询缓存、分析器、优化器、执行器。
所有的内置函数(如日期、时间、数学和加密函数)、所有跨存储引擎(存储过程、触发器、视图)的功能都在这层实现。
存储引擎层负责数据的存储和提取。
支持 InnoDB、MyIsAM、Menory 等诸多存储引擎,MySQL 5.5.5 版本开始成为默认存储引擎

连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。
1,连接建立后即使使用管理员账号修改了这个用户的权限,也不会影响已经存在的连接权限。只有再新建连接才会使用新的权限设置
2,MySQL 在执行过程中使用的内存管理在连接对象里,连接断开的时候才会释放,长连接累积下来,可能会导致内存占用太大
3,连接完成后,如果没有后续动作,这个连接就处于空闲状态,可以通过 show processlist 命令查看,command 显示为 “Sleep” 是空闲连接。
4,如果长时间没动静,连接器会自动断开连接,断开连接的默认时间为 8 小时,有参数 wait_timeout 控制。
5,连接有长连接和短连接,短连接是每次执行完很少的几次查询就断开连接,下次再重新建立一个,建立连接的过程比较复杂
,尽可能减少建立连接的动作,尽量使用长连接。
查询缓存:连接建立完成,执行逻辑就会进入查询缓存,执行结果已key-value的形式缓存在内存中。
1,查询缓存失效非常频繁,只要有对一个表的更新,这个表的所有查询缓存都会清空。
2,可以关闭查询缓存,query_cache_type 成 DEMAND,不使用查询缓存
3,可以显示制定使用查询缓存,SQL_CACHE
4,MySQL 8.0 版本中删除了查询缓存模块

分析器:对 SQL 语句做解析,知道要做什么
1,分析器执行步骤是先做词法分析,再做语法分析
2,词法分析是识别出 SQL 里面的字符串是什么
3,语法分析是根据语法规则判断这个 SQL 是否满足 MySQL 语法,语句不对会做错误提醒

优化器:在 SQL 开始执行之前要经过优化器的处理,知道怎么做
1,表里面有多个索引的时候,决定使用哪个索引
2,一个语句有多张关联表的时候,决定各个表的连接顺序

执行器:开始执行语句
1,执行器执行前,先做权限验证
2,如果命中查询缓存返回结果的时候,也要做权限验证
3,查询也会在优化器之前调用precheck验证权限
4,执行器会根据表的引擎定义,去使用这个引擎提供的接口

执行器执行的流程
1,查询语句没有索引、查询语句有索引是普通索引、查询语句有索引是唯一索引,三种执行方式有些差别
2,慢日志中 rows_examined 字段,标识这个语句执行过程中扫描了多少行,这个值就是执行器每次调用引擎获取数据行的时候累加的
3,引擎扫描行数跟 rows_examined 并不是完全相同。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2020-05/163200.htm

linux
相关资讯       MySQL查询语句 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款