作者:IT邦德
中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計
(Web\java\Python)工作,主要服務于生産制造
現擁有 Oracle 11g OCP/OCM、
Mysql、Oceanbase(OBCA)認證
分布式TBase\TDSQL資料庫、國産達夢資料庫以及紅帽子認證
從業8年DBA工作,在資料庫領域有豐富的經驗
擅長Oracle資料庫運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。
文章目錄
- 前言
- 1 hash join
- 2 merge join
- 3.nested loop
前言
在多表聯合查詢的時候,如果我們檢視它的執行計劃, 就會發現裡面有多表之間的連接配接方式 多表之間的連接配接有三種方式: Nested Loops,Hash Join 和 Sort Merge Join. 具體适用哪種類型的連接配接取決于: * 目前的優化器模式 (ALL_ROWS 和 RULE) * 取決于表大小 * 取決于連接配接列是否有索引 * 取決于連接配接列是否排序
1 hash join
使用情況:Hash join在兩個表的資料量差别很大的時候.(小表一般會丢在記憶體中)
2 merge join
Merge Join 是先将關聯表的關聯列各自做排序,
然後從各自的排序表中抽取資料,到另一個排序表中做比對。
适用情況:
1.RBO模式
2.不等價關聯(>,<,>=,<=,<>)
3.HASH_JOIN_ENABLED=false
4. 用在沒有索引,并且資料已經排序的情況.
3.nested loop
(驅動表outer table),
然後通路另一張表(被查找表 inner table,通常有索引)。
驅動表中的每一行與inner表中的相應記錄JOIN。類似一個嵌套的循環。
适用情況:
适用于驅動表的記錄集比較小(<10000)而且inner表需要有有效的通路方法(Index),
并且索引選擇性較好的時候.
JOIN的順序很重要,驅動表的記錄集一定要小,傳回結果集的響應時間是最快的。
如果覺得文章對你有幫助,點贊、收藏、關注、評論,一鍵四連支援