SQL執(zhí)行步驟的具體分析
發(fā)布日期:2022-04-02 12:06 | 文章來源:源碼中國
SQL執(zhí)行步驟的具體分析
先來看執(zhí)行語句的順序
(8)select (9)distinct A (1)from Ta (3)join Tb
(2)on XXX (4)where XXX (5)group by XXX (6)with
{cube|roll up} (7)having XXX (10)order by XXX (11)limit XXX
接著我們看一下具體分析查詢處理的各個階段:
- FROM 對from子句中的左表和右表執(zhí)行笛卡爾集,產(chǎn)生虛擬表VT1
- ON 對虛擬表VT1進(jìn)行on篩選,只有那些符合join condition的行才被插入虛擬表VT2中
- JOIN 如果指定了outer join,那么保留表中未匹配的行作為外部行添加到虛擬表VT2中,產(chǎn)生虛擬表VT3。如果from子句包含兩個以上的表,則對上一個連接生成的結(jié)果表中VT3和下一個表重復(fù)執(zhí)行步驟1~步驟3,直到處理完所有的表為止。
- WHERE 對虛擬表VT3進(jìn)行where過濾條件,只有符合條件的才被插入到虛擬表VT4中。
- GROUP BY 根據(jù)group by子句中的列,對VT4中的記錄進(jìn)行分組操作,產(chǎn)生VT5.
- CUBE|ROLL UP 對表VT5進(jìn)行CUBE或者ROLLUP操作,產(chǎn)生表VT6.
- HAVING 對虛擬表VT6應(yīng)用having過濾器,只有符合條件的記錄才會被插入到虛擬表VT7中
- SELECT 第二次執(zhí)行select操作,選擇指定的列,插入到虛擬表VT8中。
- DISTINCT 去除重復(fù)數(shù)據(jù),產(chǎn)生虛擬表VT9。
- ORDER BY 將虛擬表VT9中的記錄按照指定的要求進(jìn)行排序操作,產(chǎn)生虛擬表VT10
- LIMIT 取出指定行的記錄,產(chǎn)生虛擬表VT11,并返回給查詢用戶
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章
關(guān)注官方微信