【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
 
