mysql语句的执行顺序

一、sql执行的流程

1 mysql客户端发送查询请求到服务器。

2 mysql服务器接收请求并处理,mysql解析器解析查询语句,进行语法分析,确保查询语句符合mysql的语法要求。

3 mysql的查询优化器对sql语句进行优化处理(选择最合适的索引,或使用其它技术来提高性能),生成执行计划。

4 mysql执行引擎根据执行计划来调用存储引擎来获取数据(执行引擎与存储引擎之间通过api接口调用通信,存储引擎提供数据),常见的存储引擎有InnoDB,MyISAM。Mysql从5.5开始使用InnoDB作为默认存储引擎。

二、sql语句的执行顺序

1 from  <left_table> 定位到具体的table

2 on <join_condition>

3 <join_type> join <right_table>

4 where <where_condition>

在当前应用WHERE过滤器时,有两种过滤是不被允许的:

  • 由于数据还没有分组,因此现在还不能在WHERE过滤器中使用where_condition=MIN(col)、MAX(col)、SUM(col)等这类聚集函数
  • 由于没有进行列的选取操作(where执行顺序在select之前),因此在WHERE 中使用列的别名也是不被允许的,如SELECT city as c FROM t WHERE c='ShangHai'是不允许出现的

5 group by <group_by_list>

6 with 一般不用

7 having <having_condition>

8 select 

9 distinct

10 order by

11 limit

三、单表查询的过程

例:select * from t_user where username = "沉香";

先判断username上是否有索引,若无索引,则去聚集索引进行全表查询;若有索引,则利用索引查询。利用索引时还需判断是否是覆盖索引,是的话直接返回数据,不是的话回表走聚集索引查询数据。

posted @ 2024-03-04 17:45  江湖凶险  阅读(104)  评论(0编辑  收藏  举报