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