MySQL SELECT 执行的具体步骤

1:SELECT 执行的顺序

8SELECT 
9DISTINCT <select_list>
1FROM <left_table>
3JOIN <right_table>
2ON <join_condition>
4WHERE <where_condition>
5GROUP BY <group_by_list>
6WITH {CUBE|ROLLUP}
7HAVING <having_condition>
10ORDER BY <order_by_list>
11LIMIT <limit_number>

可以看到最先执行的是FROM 最后会执行LIMIT 。每一个步骤都会产生一个虚拟表,该虚拟表对用户是透明的,之后最后异步生成的虚拟表才会返回给用户。

2:分析详细的执行过程  

1:FROM :如果是一个表的话就是从该表选取数据,如果是两个表的话,会执行笛卡尔积,产生虚拟表VT1。

2:ON:对虚拟表VT1 应用ON筛选,符合条件的行插入到虚拟表VT2 中。

3:JOIN:如果指定了OUTER JOIN (LEFT OUTER JOIN、RIGHT OUTER JOIN)保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。

4:WHERE :对虚拟表VT3进行条件过滤,符合条件的插入的虚拟表VT4中。

5:GROUP BY :对虚拟表VT4进行分组操作。产生虚拟表VT5。

6:CUBE|ROLLUP对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6.

7:HAVING:对VT6表进行过滤。符合条件的插入VT7中。

8:SELECT:第二次执行select操作选择指定的列,插入到虚拟表VT8中。

9:DISTINCT:去重。然后插入虚拟表VT9中。

10:ORDER BY :排序,产生虚拟表VT10.

11:LIMIT:取出指定的行。产生虚拟表VT11,并且返回给用户。

 

原文地址:https://www.cnblogs.com/xiaoit/p/4585867.html