欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql语句的执行顺序

程序员文章站 2022-07-02 17:34:38
今天思考on,where,having的执行顺序,联想到了整个sql语句的执行顺序。 sql语句的执行顺序为 (1) from (2) on (3) join (4) where (5) group by, count, sum, avg(6) having (7) select (8) disti ......

A Beginner’s Guide to the True Order of SQL Operations

sql语句的执行顺序如下(逻辑上应该如此,实际上可能有所调整):

  • FROM:任何sql语句都应该先执行FROM子句,加载数据表的所有数据行。
  • WHERE:筛选出符合WHERE条件的数据行,快速缩减所需处理的数据行数。
  • GROUP BY:得到一个Map<String, List<Row>>结构,GROUP BY子句字段相同的数据行被放到同一个Key对应的List<Row>中,且只包含GROUP BY子句字段,而且List<Row>中的这些字段只能被聚合函数访问。至此,能够被select查询到的实际上只剩下Key中的字段值和聚合函数的结果值了(其他字段无法再被查询返回)。
  • aggregations:聚合函数对每个group的List<Row>进行操作,操作完成后,这个List<Row>就会被删除。如果没有GROUP BY子句,那么默认将所有数据行看做一个大的group进行操作。
  • HAVING:使用聚合函数的结果值,进行条件过滤。
  • WINDOW:略
  • SELECT:根据前面所有子句执行后所得的结果集,从中挑选字段组成新的结果集。
  • DISTINCT:字段去重,去掉重复的数据行。
  • UNION, INTERSECT, EXCEPT:略
  • ORDER BY:经过上面一连串的执行,大大的削减了数据规模,最后才进行排序,效率更高。(假如放前面执行排好序,有可能还会被后面其他子句的执行所打乱)
  • OFFSET:不要使用OFFSET,据说OFFSET的开销很大,是从前往后遍历的方式一个个地去查找的,参考Faster SQL Pagination with jOOQ Using the Seek Method
  • LIMIT, FETCH, TOP:最后从结果集中取出前面一部分数据行返回。

本文地址:https://blog.csdn.net/weixin_41519463/article/details/107668623