一 普通sql执行的具体过程
1 连接器
  管理连接,权限验证
2 分析器
  词法分析,语法分析
   比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等
3 优化器检测
   执行计划生成,索引选择
4 执行器
   1 判断是否拥有操作权限->这里包含更为复杂的权限验证,比如触发器,存储过程等
   2 执行sql,返回结果集到客户端
5 存储引擎层
  存储引擎层提供和server端进行交互的读写接口,存储真正的数据
注意
  1 本文不考虑查询缓存的情况,因为现在线上数据库都建议关闭查询缓存,8.0已经删除查询缓存功能
  2 执行器如何执行sql取值的
  调用 InnoDB 引擎接口取这个表的每一行,重复逻辑判断,存储符合条件的值在内存,最后将符合结果的集合返回到客户端
二 查询语句的执行
 select查询过程(重点)
  1 storage层根据成本优化器选择出的索引进行过滤,然后将过滤出的数据行返回给server层
  2 server层针对返回的数据,使用后面的where条件过滤,直到返回最后一行,得出结果
server-read->engine-index_filter->server-where_filter->client(无ICP)
server-read->engine-index_filter->engine_index(2)_fliter->server-where_filter->client(ICP)
核心思想
 1 减少storage和server层的交互
 2 sql语句中花费时间最多的便是storage和server层的交互

3 sql语句是逐行扫描确定的

三 返回结果

1 mysql是边读边发的,比如1千万数据,mysql服务端是不用保留全部的结果集的,根据参数net_buffer_length规定的大小,写满net_buffer后就通过网络接口发送,然后再清除,继续写入,以此类推

server  data写入buffer,通过socket send buffer推送

client  通过 socket receive进行接收

最新文章

  1. Angular2学习笔记(1)
  2. 网站开发常用cmd命令
  3. 文件上传ajaxfileupload.js插件
  4. 使用Canvas把照片转换成素描画
  5. 前言:关于nagios监控
  6. 题目1069:查找学生信息(STL的map简单应用)
  7. 解决从github下载web的源代码部署到eclipse的问题
  8. hibernate学习(一)
  9. hdu_4467_Graph(莫队算法思想)
  10. asp.net core mvc剖析:mvc执行过程(一)
  11. 鸟哥的linux私房菜学习-(二)VMware虚拟机及linux系统安装过程
  12. Juint单元测试
  13. pandas操作
  14. 使用.Net Core 2.1开发Captcha图片验证码服务
  15. 目标检测算法之YOLOv1与v2
  16. PAT 1081 检查密码
  17. C#批量更新mongodb符合条件的数据
  18. 13-算法训练 P0505
  19. 解决Hsqldb指针只能单向移动,不能回滚问题(.first())
  20. Ubuntu+Nginx+uWSGI+Flask应用

热门文章

  1. Java生成数独函数
  2. 有源汇有上下界最小流 DInic + 各种优化 模板
  3. Mysterious Bacteria LightOJ - 1220
  4. Codeforces Round #381 (Div. 2)C Alyona and mex
  5. MT【68】一边柯西一边舍弃
  6. [luogu1373]小a和uim之大逃离【动态规划】
  7. SharePoint 2013 Central Admin 不能打开
  8. 【翻译】go memory model
  9. WCF快速搭建Demo
  10. 【loj3056】【hnoi2019】多边形