SQL 执行流程
一、MySQL 的查询流程
1、查询缓存
sql 作为 key,结果集作为 value 缓存。
被废弃的原因:
- 命中率低
- 如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如mysql、information_schema、performance_schema数据库中的表,则不会被缓存
- 缓存会频繁失效,该表的结构或者数据被修改,如对该表使用了
INSERT
、UPDATE
、DELETE
、TRUNCATE TABLE
、ALTER TABLE
、DROP TABLE
或DROP DATABASE
语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。
2、解析器
在解析器中对 SQL 语句进行语法分析、语义分析。
语法树
SQL 词法分析的过程步骤:
3、优化器
在优化器中会确定 SQL 语句的执行路径,比如是根据全表检索
,还是根据索引检索
等。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划
逻辑查询优化
逻辑查询优化就是通过改变SQL语句的内容来使得SQL查询更高效,同时为物理查询优化提供更多的候选执行计划。通常采用的方式是对SQL语句进行等价变换
,对查询进行重写
,而查询重写的数学基础就是关系代数。对条件表达式进行等价谓词重写、条件简化,对视图进行重写,对子查询进行优化,对连接语义进行了外连接消除、嵌套连接消除等。