星期三, 7月 18, 2012

Oracle SQL outer join 效能調教(performance tuning)

看到一篇文章 先引用起來

如果SQL中有兩個table outer join 有太多nested loop的問題,造成cost很高 , 可以採用以下Oracle 建議的hint 測試
To perform this outer join, 3 different join techniques have been provided by oracle.
·   Nested loop outer join  :  USE_NL(tab a b)
·   Hash outer join : USE_HASH(tab a b)
·   Sort merge outer join : USE_MERGE(tab a b])

@20120719 心得:
Oracle厲害的地方可不少, 經過一個SQL改寫後 再加上/*+ FIRST_ROWS */ hint  , 
SQL 就從原本的兩分鐘 , 加速到一秒就吐出(output)結果.

@20140512
Nested loop 是CBO最終挑選用迴圈來join, 透過index tree來fetch資料, 如果表格一大一小可能會做很快, 但表格都很大會做很久.
Hash join 就是用hash function去做, 當表格數量相當, 或數量都很大時會用到, 所需要的記憶體較多
Merge join 需要較少的記憶體, 適用於大表格處理

@20150310
Nested loop join :
適用兩個小的表格做join

Hash join :
1.適用兩個大table, 或是一小, 一大表格的join
使用小表格中的pk, 擁有不多的distinct value, 會產生一個hash table到memory, 讓
表格的join 速度加快
2.適用equal join (join 的欄位使用=等號)

Merge join :

適用於 non-equal join( > , < , <=) , 或是已經sort 過的資料表格(透過index range scan撈到的資料)

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...