MySQL的語(yǔ)句執(zhí)行順序
MySQL的語(yǔ)句分為11個(gè)步驟。如下圖所示,從操作總是首先執(zhí)行,而限制操作是最后執(zhí)行的。這些操作中的每一個(gè)都會(huì)產(chǎn)生一個(gè)虛擬表,作為流程的輸入,但是這些虛擬表對(duì)用戶來(lái)說(shuō)是透明的,結(jié)果只會(huì)返回最后一個(gè)虛擬表。如果語(yǔ)句中沒(méi)有指定子句,將跳過(guò)相應(yīng)的步驟。
方法/步驟1讓我們?cè)敿?xì)分析查詢處理的每個(gè)階段
計(jì)算左表和右表的笛卡爾乘積。生成虛擬表VT1
2ON
:虛擬表VT1已被打開(kāi)過(guò)濾,只有那些匹配的行將被記錄在虛擬表VT2中。
3JOIN
:如果指定了OUTER聯(lián)接(如左聯(lián)接和右聯(lián)接),則保留表中不匹配的行將作為外部行添加到虛擬表VT2,以生成虛擬表VT3。如果VT3,rug from子句包含兩個(gè)以上的表,那么將對(duì)由前一個(gè)JOIN連接和下一個(gè)表生成的結(jié)果VT3重復(fù)步驟1到3的三個(gè)步驟,直到處理完所有的表。
4在哪里
:用WHERE條件過(guò)濾虛擬表VT3。只有匹配的記錄才會(huì)被插入虛擬表VT4。
5分組依據(jù)
根據(jù)group by子句中的列,VT4中的記錄被分組以生成VT5。
6CUBE | ROLLUP
:對(duì)表VT5執(zhí)行多維數(shù)據(jù)集或匯總操作以生成表VT6。
7擁有
:對(duì)虛擬表VT6應(yīng)用過(guò)濾,只有匹配的記錄才會(huì)被插入到虛擬表VT7中。
8選擇
:執(zhí)行選擇操作,選擇指定的列,并將其插入虛擬表VT8。
9獨(dú)特
:重編VT8中的記錄。生成虛擬表VT9。
10訂購(gòu)方
:對(duì)虛擬表VT9中的記錄進(jìn)行排序,以生成虛擬表VT10。
11極限
:取出指定行的記錄,生成虛擬表VT11,并返回結(jié)果。
結(jié)束語(yǔ)主觀能動(dòng)性有助于縮短夢(mèng)想的距離