MySQL执行顺序分析

MySQL手写顺序

select

distinct <select_list>

from <table_name>

<join_type> join <join_table> on <join_condition>

where <where_condition>

group by <group_by_list>

having <having_condition>

order by <order_by_condition>

limit <limt_number>

 MySQL执行顺序

  1. from <left table>
  2. on <on_condition>
  3. <join_type> join <join_table>
  4. where <where_condition>
  5. group by <group_by_list>
  6. <count()、sum()、avg()等聚合函数>
  7. having <having_condition>
  8. select <select_list>
  9. distinct
  10. order by <order_by_condition>
  11.  limit <limit_number>

MySQL执行顺序理解

1. from(含子查询),from是查询的开端,首先需要知道最开始从哪个表开始的,确定数据源。

2. on,对虚表from语句的数据源进行on筛选,只有那些符合的行才会被记录在虚表T1中。

3. join,如果from后面是多张表,join关联,会首先对前两个表执行一个笛卡尔乘积,如果from子句中包含两个以上的表的话(存在多个join),那么就会对上一个join连接产生的结果和下一个表重复执行1~3这三个步骤,一直到处理完所有的表为止,这时候就会生成虚拟表T2。

4. where,对虚拟表T2进行where条件过滤。只有符合的记录才会被插入到虚拟表T3中。

5. group by,子句将T3中的唯一的值组合成为一组,得到虚拟表T4。

6. avg,sum…等聚合函数,聚合函数只是对分组的结果进行一些处理,拿到某些想要的聚合值,例如求和,统计数量等,并不生成虚拟表。

7. having,应用having筛选器,生成T5。having子句主要和group by子句配合使用,having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。

8. select,执行select操作,选择指定的列,插入到虚拟表T6中。

9. distinct,对T6中的记录进行去重。移除相同的行,产生虚拟表T7。

10.order by,应用order by子句。按照order_by_condition排序T7,此时返回的一个游标,而不是虚拟表。

11.limit,取出指定行的记录,产生虚拟表T8, 并将结果返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值