注:由于查询优化器涉及面很广也比较复杂,本文主要来自书籍<<数据库查询优化的艺术: 原理解析和SQL性能优化>>
一、查询语句的执行过程简介
MySQL查询语句在数据库中的执行分为5个阶段,具体如下:
1.1 SQL输入
数据库接收用户输入的SQL语句,准备执行。
1.2 语法分析
对输入的SQL语句进行词法分析、语法分析,得到语法分析树。在这个阶段,输入的是一条SQL语句,输出的是一棵多叉树。
1.3 语义检查
根据语法树和系统的元信息进行语义检查,本阶段是对语法分析树进行逻辑判断,树的结构不发生变化。对语法分析树上的各个节点进行语义分析,判断对象是否存在、是否重名等,对不合语义的地方报告错误。
1.4 SQL优化
SQL优化通常包括两项工作:一是逻辑优化、二是物理优化。这两项工作都要对语法分析树的形态进行修改,把语法分析树变为查询树。其中,逻辑查询优化将生成逻辑查询执行计划。在生成逻辑查询执行计划过程中,根据关系代数的原理,把语法分析树变为关系代数语法树的样式,原先SQL语义中的一些谓词变化为逻辑代数的操作符等样式,这些样式是一个临时的中间状态,经过进一步的逻辑查