聊一聊MySQL语句的执行顺序

网友投稿 515 2022-11-10

聊一聊MySQL语句的执行顺序

聊一聊MySQL语句的执行顺序

一、背景

今天被同事问到一个问题,order by 和 limit哪个在前。恭喜我,很尴尬的回答错了。我觉得两种都可以支持,只是返回不同的结果;但是​​select​​​操作需要保证​​幂等性​​,所以注定只有一种可能;于是记录一下MySQL的语句执行顺序。

二、MySQL的执行顺序

MySQL的语句一共分为11步。

最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为下一个处理的输入。但这些虚拟表对调用者(客户端应用程序或者外部查询)不可用,只有最后一个虚拟的表才会被作为结果返回;如果没有在查询中指定某一个子句,将跳过相应的步骤。

FROM:对FROM左边的的表和右边的表计算笛卡尔积,产生虚拟表VT1.ON :对虚表VT1进行ON筛选,符合规则的表被记录在虚表VT2中。JOIN:如果指定了OUTER JOIN,那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生VT3。WHERE:对虚表3进行WHERE条件过滤。符合条件的记录才会被插入到虚拟表VT4中。GROUP BY:根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。WITH(CUBE|ROLLUP):对VT5进行cube或者rollup操作,产生表VT6。HAVING:对虚拟表VT6进行having过滤,产生虚拟表VT7。ORDER BY:对虚拟表VT7的结果集进行排序,产生虚拟表VT8。LIMIT:对虚拟表VT8做结果集截取操作。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:动态搜索图书:可以按书名、作者、出版社以及价格范围进行搜索。(在IDEA中mybatis)
下一篇:《RocketMQ源码分析》部分Consumer下线后,倒推Broker如何做到准实时通知剩余Consumer?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~