子查詢是指在一個(gè)SELECT語(yǔ)句中嵌套另一個(gè)SELECT語(yǔ)句。子查詢與主查詢之間并不是水平關(guān)系,而是從屬關(guān)系。這就意味著不論使用哪種類型的子查詢,都必須確保不能改變主查詢的完整性。通常情況下,優(yōu)化器都會(huì)將子查詢合并到主查詢中,以便產(chǎn)生更優(yōu)質(zhì)的執(zhí)行計(jì)劃。這里可能采用嵌套循環(huán)、排序合并或哈希連接等方式。
下面我們來(lái)看看子查詢可能的幾種處理方式。
在合并之后,可能有兩種處理方式:一種是子查詢優(yōu)先,一種是主查詢優(yōu)先。
1.子查詢優(yōu)先
如果子查詢與主查詢的表連接方式是優(yōu)先執(zhí)行子查詢,并將其執(zhí)行結(jié)果提供給主查詢的嵌套循環(huán)連接,那么優(yōu)化器將優(yōu)先執(zhí)行子查詢,并通過(guò)對(duì)結(jié)果進(jìn)行唯一排序SOR(UNIQUE),再與主查詢進(jìn)行連接。在排序合并連接和哈希連接中,也是這樣處理的。通常可以看到類似下面的執(zhí)行計(jì)劃。
2.主查詢優(yōu)先
如果將主查詢的執(zhí)行結(jié)果作為外側(cè)循環(huán)來(lái)使用,而把子查詢作為內(nèi)側(cè)循環(huán)來(lái)使用。此時(shí)采用在內(nèi)側(cè)循環(huán)中第一行被連接成功之后就立刻結(jié)束內(nèi)側(cè)循環(huán)的方式。這種處理方式所制定的策略就是前面在嵌套循環(huán)中提到的FILTER。通常可以看到類似下面的執(zhí)行計(jì)劃。[插圖]下邊我們首先來(lái)看看子查詢的分類。