sql执行过程
客户端->连接器->查询缓存->解析器(词法分析、语法分析)->预处理器->优化器->执行器->存储引擎
1.客户端
在程序或命令行里输入SQL语句后,通过连接器进入MySQL。
2.连接器
建立 TCP 连接,校验用户的账号密码,并维护连接(分为长连接 / 短连接);连接建立后,会关联该用户的权限信息(后续权限检查基于此)。
3.查询缓存(MySQL 8.0 已移除)
以相同 SQL(文本完全一致)为Key查询缓存,如果命中缓存则直接返回,否则继续往下执行。
4.解析器
词法分析:将SQL拆分为关键字(SELECT、FROM)、表名、列等。
语法分析:根据SQL语法规则,生成语法树,判断SQL是否合法。
5.预处理器
检查表和字段是否存在,将select*中的*扩展为表中所有的列,解析别名、处理常量折叠、校验数据类型兼容性。
6.优化器
决定如何执行SQL,主要优化内容:选择索引、表连接方式、优化表达式,选择查询成本最小的执行计划。
7.执行器
先进行初步权限校验(如是否有目标表的操作权限),根据执行计划,通过存储引擎 API 调用底层存储引擎,执行过程中若有特殊操作,再次确认权限,并处理锁(如行锁、表锁)。
8.存储引擎
根据执行器的指令完成具体数据操作,将结果返回给执行器;执行器再将结果逐层返回给客户端(若开启查询缓存,会同时将结果存入缓存)。