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