接续《SQL执行顺序1》
如果增加排序子句,那么结果会大相径庭。
图2
这个执行结果是取出了全部记录,限于篇幅,没有截取全部内容。
我们通过变量值的变化可以推导出sql执行的顺序。大致如下:
1.where,判断@rownum<=1,此时变量@rownum=0,变量@rownum1=0,第一个条件符合
2.where,第二个条件and关联,需要同时满足必须执行。而这个调价是复制行为,一定会满足。执行后@rownum1变量值被复制0+1,即为1
注:到此时跟前文是一致的。
3.本应开始取值,但因为要做文件排序(filesort),需要提取全表数据,于是select全表数据并在过程中每行都执行了@rownum:=@rownum+1。
所以我们看到了@rownum最后值就是全部行数。
而cnt1列都是1,原因是未在执行where子句内的条件。
4.where