Priority of SQL Clauses

SQL语句的优先级

Posted by Lyon Ling on February 22, 2019

最近在学Spark SQL的时候顺便复习了一下SQL语句,其中遇到一些问题就顺便把网上查到的结论记下来。

在写复杂的SQL语句的时候如果不注意其中的工作原理,很容易就会写出效率低,出错率高的SQL语句,这里列举了一些SQL关键字的执行优先级。

  • FROM字句:执行顺序为从后往前、从右到左。数据量较大的表尽量放在后面。

  • WHERE字句:执行顺序为自下而上、从右到左。将能过滤掉最大数量记录的条件写在WHERE字句的最右。

  • GROUP BY:执行顺序从右往左分组,最好在GROUP BY前使用WHERE将不需要的记录在GROUP BY之前过滤掉

  • HAVING字句:消耗资源。尽量避免使用,HAVING会在检索出所有记录之后才对结果进行过滤,需要排序等操作。

  • SELECT字句:少用*号,尽量使用字段名称,oracle在解析的过程中,通过查询数据字典将*号依次转换成所有列名,消耗时间。

  • ORDER BY字句:执行顺序从左到右,消耗资源.

All in all, the general selection sequence could be

FROM –> ON –> JOIN –> WHERE –> GROUP BY –> HAVING –> SELECT –> DISTINCT –> ORDER BY

without considering the sub clause, because of the effect of brakets.

原文:https://blog.csdn.net/qigc_0529/article/details/52096466