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