MYSQL--查询的执行流程

MYSQL--查询的执行流程
查询的执行流程执行流程整体分为客户端连接-连接器-查询缓存-解析器-预处理器-查询优化器-执行器-存储引擎 -返回结果。1.连接器建立TCP连接校验账号密码权限。分配线程处理当前会话保存该用户的表权限视图权限。长连接/短连接管理空闲时超时断开。2.查询缓存逻辑keySQL文本会话环境value结果集。命中直接返回结果跳过解析/优化/执行。失效严重表发生增删改结构变更整张表缓存全部清空线上基本禁用3.解析器词法分析拆分SQL为token(关键字表名字段运算符常量)。语法分析根据MySQL语法规则生成语法树AST。4.预处理器基于AST做语义校验1.检查表字段是否存在。2.校验别名冲突字段歧义。3.处理试图存储过程常量替换4.权限二次校验当前用户是否拥有该表/字段查询权限。5.查询优化器Optimizer输入合法AST输出最优执行计划作用选出代价最小的执行方案6.执行器拿到执行计划调用存储引擎接口逐行读取数据按计划选择索引、过滤条件、连接顺序调用引擎read_row()获取数据应用where过滤、group by聚合、order by排序、limit截断组装结果返回客户端7.InnoDB存储引擎判断数据是否在缓冲池 Buffer Pool命中直接返回未命中走磁盘 IO 加载页到缓冲池MVCC 事务隔离、行锁、undo/redo 日志、事务可见性判断返回行数据给执行器。查询优化器的工作原理MySQL优化器是基于代价的优化器CBO核心逻辑生成多种可执行方案计算每种方案的预估代价选择代价最低的执行计划。阶段一等价变换不改变语义但简化查询减少后续计算开销。1.常量传递select * from t where id 1 and a id;2.去除无用条件where 10 直接返回空结果and 11删除恒真条件3.子查询展开/消除IN子查询转JOIN,相关子查询扁平化避免重复扫描。4.外连接转内连接若where条件过滤掉NULLLEFT JOIN 等价于INNER JOIN ,优化连接成本5.谓词下推把过滤条件尽量下推到表的扫描阶段减少JOIN行数。聚合提前过滤having条件下推到where.6.合并/消除派生表视图子查询派生表直接合并到外层避免临时表的开销阶段二枚举可执行方案优化器要做三件关键抉择组合出大量执行方案1.多表JOIN连接顺序选择2.每种表选择访问方式单表扫描方案3. 排序 / 聚合策略选择阶段三代价模型计算Cost评估表总行数、数据页数量索引基数cardinality索引区分度单条记录长度、字段 NULL 比例索引区间数据分布。阶段四生成执行计划输出确定最终索引、JOIN 顺序、驱动表、是否 filesort、是否临时表生成结构化执行计划explain命令可查看传递给执行器执行。