【mysql】执行过程,背诵版
sql执行再mysql的执行过程
1. 建立连接
- sql通过tcp/ip发送到服务器
- 服务器检查用户名,密码,权限
- 创建线程处理连接
如果是sql8.0之前,select会先从缓存中查找,命中则返回,由于表结构变更会导致缓存失效,已废除
2.解析和优化
- 词法分析:拆分成token
- 语法分析:检查语法
- 生成解析树
解析树是SQL语句经过解析器处理后的结构化表示形式。它就像把一句SQL语句"拆解"成一个树状的结构图
以SQL语句 SELECT name FROM users WHERE age > 18
为例,它的解析树可能大致如下:
SELECT_STATEMENT/ | \SELECT FROM WHERE| | |name users CONDITION|age > 18
- 预处理器:
- 检查表列是否存在,
- 检查权限
- 视图展开
- 查询优化器:
- 基于成本优化cbo选择最佳执行方案
- 生成执行计划 可以通过explain查看
3.执行查询sql
- innodb执行:
- 缓冲池检查,看所需数据是否在内存页
- 磁盘读取,没有就查磁盘
- 加锁,(排他锁/共享锁)
- 事务处理:写入undolog redolog
- 返回结果
4.返回结果
- 返回客户端
- 连接保活或者关闭
https://github.com/0voice