天天看點

Oracle SQL優化之多表連接配接

作者:IT邦德
中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計
(Web\java\Python)工作,主要服務于生産制造
現擁有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)認證
分布式TBase\TDSQL資料庫、國産達夢資料庫以及紅帽子認證
從業8年DBA工作,在資料庫領域有豐富的經驗
擅長Oracle資料庫運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。      
Oracle SQL優化之多表連接配接

文章目錄

  • ​​前言​​
  • ​​1 hash join​​
  • ​​2 merge join​​
  • ​​3.nested loop​​

前言

在多表聯合查詢的時候,如果我們檢視它的執行計劃, 就會發現裡面有多表之間的連接配接方式 多表之間的連接配接有三種方式: Nested Loops,Hash Join 和 Sort Merge Join. 具體适用哪種類型的連接配接取決于: * 目前的優化器模式 (ALL_ROWS 和 RULE) * 取決于表大小 * 取決于連接配接列是否有索引 * 取決于連接配接列是否排序

1 hash join

使用情況:Hash join在兩個表的資料量差别很大的時候.(小表一般會丢在記憶體中)      
Oracle SQL優化之多表連接配接
Oracle SQL優化之多表連接配接

2 merge join

Merge Join 是先将關聯表的關聯列各自做排序,
然後從各自的排序表中抽取資料,到另一個排序表中做比對。
适用情況:

1.RBO模式
2.不等價關聯(>,<,>=,<=,<>)
3.HASH_JOIN_ENABLED=false
4. 用在沒有索引,并且資料已經排序的情況.      
Oracle SQL優化之多表連接配接
Oracle SQL優化之多表連接配接

3.nested loop

(驅動表outer table),
  然後通路另一張表(被查找表 inner table,通常有索引)。
  驅動表中的每一行與inner表中的相應記錄JOIN。類似一個嵌套的循環。
适用情況:
适用于驅動表的記錄集比較小(<10000)而且inner表需要有有效的通路方法(Index),
并且索引選擇性較好的時候.
JOIN的順序很重要,驅動表的記錄集一定要小,傳回結果集的響應時間是最快的。      
Oracle SQL優化之多表連接配接
Oracle SQL優化之多表連接配接

如果覺得文章對你有幫助,點贊、收藏、關注、評論,一鍵四連支援