面试的时候你可能遇到过面试官提出:SQL的书写顺序,SQL的执行(解析)顺序,WHERE条件执行顺序等问题。这篇文章就简要总结下上面的几个问题。
一、MySQL中SQL的书写顺序和执行顺序
sql编写顺序:
select distinct…from…join…on…where…group by…having…order by…limit…
sql解析顺序:
from…on…join…where…group by…having…select distinct…order by…limit…
二、MySQL和Oracle中where条件语句的执行顺序
(1)Oracle中where条件语句执行顺序:
从右往左
这里备注下我朋友踩的一个坑,他不踩我还不知道的内容:
Oracle中where条件从右往左运行,如果最右边条件不满足情况(and连接)返回空的结果,这时候左边的条件他就不会被编译,如果左边的条件是错误的那也是不会报错的,直接返回空,但如果这个错误条件在最右边,那就会直接编译报错。这里也说明下具体情况,如果where后面的字段如果有索引字段,会先执行索引字段了,所以这里如果索引字段写在左边,右边的字段仍是不规范的,这样也不会报错,因为先执行索引字段的条件没有查询到任何结果会直接返回空,右边的字段也就不去执行了,所以并不会编译报错。
我这里并没有在Oracle中进行测试,推荐一篇文章《ORACLE中where部分条件执行顺序测试》。
(2)MySQL中where条件语句执行顺序:
从左往右
无论哪个数据库,我们先了解执行顺序后,就需要知道一个规律:
排除越多的条件应该是先执行(数据量多时考虑,数据量少时不用考虑)。
所以Oracle中排除最多的条件放在最后一位,MySQL中排除最少的放在最前一位。
注:分区 索引字段这种第一批次可以过滤大量数据的,应当放在第一执行序位