SQL 执行顺序
from —> on —> join —> where —> group by —> sum、count —> having —> select —> distinct —> order by —> limit
1、FROM:先去获取from里面的表,拿到对应的数据,生成虚拟表1。
2、ON:对虚拟表1应用ON筛选,符合条件的数据生成虚拟表2。
3、JOIN:根据JOIN的类型去执行相对应的操作,获取对应的数据,生成虚拟表3。
4、WHERE:对虚拟表3的数据进行条件过滤,符合记录的数据生成虚拟表4。
5、GROUP BY:根据group by中的列,对虚拟表4进行数据分组操作,生成虚拟表5。
6、CUBE|ROLLUP(聚合函数使用):主要是使用相关的聚合函数,生成虚拟表6。
7、HAVING:对虚拟表6的数据过滤,生成虚拟表7,这个过滤是在where中无法完成的,同时count(expr)返回不为NULL的行数,而count(1)和count(*)是会返回包括NULL在内的行数。
8、SELECT:选择指定的列,生成虚拟表8。
9、DISTINCT:数据去重,生成虚拟表9。
10、ORDER BY:对虚拟表9中的数据进行指定列的排序,生成虚拟表10。
11、LIMIT:取出指定行的记录,生成虚拟表11,返回给查询用户。
执行计划
常用于性能分析、优化
EXPLAIN(select * from table)
结果参数说明
- id:值越大越先执行,一样大从下往下执行,为 NULL表示是结果集,不需要用来查询
- select_type:simple、primary、union、dependent union、union result、subquery、dependent subquery、derived
- table
- type:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL
- possible_keys
- key
- key_len
- ref
- rows
- filtered
- extra