基本概念
nestedloop join:
outertable中的每一行與inner table中的相應記錄join,類似乙個巢狀的迴圈。
sort merge join:
將兩個表排序,然後再進行join。
hash join:
將兩個表中較小的乙個在記憶體中構造乙個hash 表(對joinkey),掃瞄另乙個表,同樣對join key進行hash後探測是否可以join,找出與之匹配的行。
一張小表被hash在記憶體中。因為資料量小,所以這張小表的大多數資料已經駐入在記憶體中,剩下的少量資料被放置在臨時表空間中;
每讀取大表的一條記錄,就和小表中記憶體中的資料進行比較,如果符合,則立即輸出資料(也就是說沒有讀取臨時表空間中的小表的資料)。而如果大表的資料與小表中臨時表空間的資料相符合,則不直接輸出,而是也被儲存臨時表空間中。
當大表的所有資料都讀取完畢,將臨時表空間中的資料以其輸出。如果小表的資料量足夠小(小於hashareasize),那所有資料就都在記憶體中了,可以避免對臨時表空間的讀寫。
如果是並行環境下,前面中的第2步就變成如下了:每讀取一條大表的記錄,和記憶體中小表的資料比較,如果符合先做join,而不直接輸出,直到整張大表資料讀取完畢。如果記憶體足夠,join好的資料就儲存在記憶體中。否則,就儲存在臨時表空間中。
適用範圍
nestedloopjoin:
適用於outer table(有的地方叫master table)的記錄集比較少(<10000)而且inner table(有的地方叫detail table)索引選擇性較好的情況下(inner table要有index)。
inner table被outer table驅動,outer table返回的每一行都要在inner table中檢索到與之匹配的行。當然也可以用ordered 提示來改變cbo預設的驅動表,使用use_nl(table_name1 table_name2)可是強制cbo 執行巢狀迴圈連線。
cost = outeraccesscost + (inner access cost * outercardinality)
sort merge join:
用在資料沒有索引但是已經排序的情況下。
通常情況下hash join的效果都比sort merge join要好,然而如果行源已經被排過序,在執行排序合併連線時不需要再排序了,這時sort merge join的效能會優於hash join。可以使用use_merge(table_name1 table_name2)來強制使用sort merge join。
cost = (outeraccesscost * # of hash partitions) + inner access cost
hash join:
適用於兩個表的資料量差別很大。但需要注意的是:如果hash錶太大,無法一次構造在記憶體中,則分成若干個partition,寫入磁碟的temporarysegment,則會多乙個i/o的代價,會降低效率,此時需要有較大的temporary segment從而盡量提高i/o的效能。
可以用use_hash(table_name1 table_name2)提示來強制使用雜湊連線。如果使用雜湊連hash_area_size 初始化引數必須足夠的大,如果是9i,oracle建議使用sql工作區自動管理,設定workarea_size_policy 為auto,然後調整pga_aggregate_target 即可。
也可以使用hash_join_enabled=false(預設為true)強制不使用hash join。
cost = (outer access cost * # of hash partitions) + inner access cost
效率比較
hash join的主要資源消耗在於cpu(在記憶體中建立臨時的hash表,並進行hash計算),而merge join的資源消耗主要在於磁碟i/o(掃瞄表或索引)。在並行系統中,hash join對cpu的消耗更加明顯。所以在cpu緊張時,最好限制使用hash join。
在絕大多數情況下,hash join效率比其他join方式效率更高:
在sort-merge join(smj),兩張表的資料都需要先做排序,然後做merge。因此效率相對最差;
nested-loop join(nl)效率比smj更高。特別是當驅動表的資料量很大(集的勢高)時。這樣可以並行掃瞄內錶。
hash join效率最高,因為只要對兩張表掃瞄一次。
三種交換技術的簡介
1 電路交換技術 網路交換技術共經歷了四個發展階段,電路交換技術 報文交換技術 分組交換技術和atm技術。公眾 網 pstn網 和移動網 包括gsm網和cdma網 採用的都是電路交換技術,它的基本特點是採用面向連線的方式,在雙方進行通訊之前,需要為通訊雙方分配一條具有固定頻寬的通訊電路,通訊雙方在通...
三種交換技術的簡介
1 電路交換技術 網路交換技術共經歷了四個發展階段,電路交換技術 報文交換技術 分組交換技術和atm技術。公眾 網 pstn網 和移動網 包括gsm網和cdma網 採用的都是電路交換技術,它的基本特點是採用面向連線的方式,在雙方進行通訊之前,需要為通訊雙方分配一條具有固定頻寬的通訊電路,通訊雙方在通...
三種交換技術的簡介
1 電路交換技術 網路交換技術共經歷了四個發展階段,電路交換技術 報文交換技術 分組交換技術和atm技術。公眾 網 pstn網 和移動網 包括gsm網和cdma網 採用的都是電路交換技術,它的基本特點是採用面向連線的方式,在雙方進行通訊之前,需要為通訊雙方分配一條具有固定頻寬的通訊電路,通訊雙方在通...