在日常基於數據庫應用的開發過程中
我們經常需要對多個表或者數據源進行關聯查詢而得出我們需要的結果集
那麼Oracle到底存在著哪幾種連接方式?優化器內部又是怎樣處理這些連接的?哪種連接方式又是適合哪種查詢需求的?只有對這些問題有了清晰的理解後
我們才能針對特定的查詢需求選擇合適的連接方式
開發出健壯的數據庫應用程序
選擇合適的表連接方法對SQL語句運行的性能有著至關重要的影響
下面我們就Oracle常用的一些連接方法及適用情景做一個簡單的介紹
一 嵌套循環連接(Nested Loop) 嵌套循環連接的工作方式是這樣的
Oracle首先選擇一張表作為連接的驅動表
這張表也稱為外部表(Outer Table)
由驅動表進行驅動連接的表或數據源稱為內部表(Inner Table)
提取驅動表中符合條件的記錄
與被驅動表的連接列進行關聯查詢符合條件的記錄
在這個過程中
Oracle首先提取驅動表中符合條件的第一條記錄
再與內部表的連接列進行關聯查詢相應的記錄行
在關聯查詢的過程中
Oracle會持續提取驅動表中其他符合條件的記錄與內部表關聯查詢
這兩個過程是並行進行的
因此嵌套循環連接返回前幾條記錄的速度是非常快的
在這裡需要說明的是
由於Oracle最小的IO單位為單個數據塊
因此在這個過程中Oracle會首先提取驅動表中符合條件的單個數據塊中的所有行
再與內部表進行關聯連接查詢的
然後提取下一個數據塊中的記錄持續地循環連接下去
當然
如果單行記錄跨越多個數據塊的話
就是一次單條記錄進行關聯查詢的
嵌套循環連接的過程如下所示
《
Oracle中表的連接及其調整》本文是由
Oracle免費提供,內容來源於互聯網,本文歸原作者所有。