自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

四分鐘學會Oracle嵌套循環(huán)

開發(fā) 后端
這里介紹Oracle嵌套循環(huán),有時不遵守這個理論依據(jù),反而會獲得更好的效率。如果使用這種方法,決定使用哪個表作為驅(qū)動表很重要。有時如果驅(qū)動表選擇不正確,將會導致語句的性能很差、很差。

學習Oracle時,你可能會遇到Oracle嵌套循環(huán)問題,這里將介紹Oracle嵌套循環(huán)問題的解決方法,在這里拿出來和大家分享一下。其實,該連接過程就是一個2層Oracle嵌套循環(huán),所以外層循環(huán)的次數(shù)越少越好,這也就是我們?yōu)槭裁磳⑿”砘蚍祷剌^小row source的表作為驅(qū)動表(用于外層循環(huán))的理論依據(jù)。

但是這個理論只是一般指導原則,因為遵循這個理論并不能總保證使語句產(chǎn)生的I/O次數(shù)最少。有時不遵守這個理論依據(jù),反而會獲得更好的效率。如果使用這種方法,決定使用哪個表作為驅(qū)動表很重要。有時如果驅(qū)動表選擇不正確,將會導致語句的性能很差、很差。

Oracle嵌套循環(huán)(Nested Loops, NL):

a) 如果driving row source(外部表)比較小,并且在inner row source(內(nèi)部表)上有唯一索引,或有高選擇性非唯一索引時,使用這種方法可以得到較好的效率。

b) NESTED LOOPS有其它連接方法沒有的的一個優(yōu)點是:可以先返回已經(jīng)連接的行,而不必等待所有的連接操作處理完才返回數(shù)據(jù),這可以實現(xiàn)快速的響應時間。

哈希連接(Hash Join, HJ):

a) 這種方法是在Oracle7后來引入的,使用了比較先進的連接理論,一般來說,其效率應該好于其它2種連接,但是這種連接只能用在CBO優(yōu)化器中,而且需要設置合適的hash_area_size參數(shù),才能取得較好的性能。

b) 在2個較大的row source之間連接時會取得相對較好的效率,在一個row source較小時則能取得更好的效率。

c) 只能用于等值連接中

笛卡兒乘積(Cartesian Product)

當兩個row source做連接,但是它們之間沒有關(guān)聯(lián)條件時,就會在兩個row source中做笛卡兒乘積,這通常由編寫代碼疏漏造成(即程序員忘了寫關(guān)聯(lián)條件)。笛卡爾乘積是一個表的每一行依次與另一個表中的所有行匹配。在特殊情況下我們可以使用笛卡兒乘積,如在星形連接中,除此之外,我們要盡量使用笛卡兒乘積,否則,自己想結(jié)果是什么吧!

注意在下面的語句中,在2個表之間沒有連接。

  1. SQL> explain plan for  
  2. select emp.deptno,dept,deptno  
  3. from emp,dept  
  4. Query Plan  
  5. SLECT STATEMENT [CHOOSE] Cost=5 
  6. MERGE JOIN CARTESIAN  
  7. TABLE ACCESS FULL DEPT  
  8. SORT JOIN  
  9. TABLE ACCESS FULL EMP 

CARTESIAN關(guān)鍵字指出了在2個表之間做笛卡爾乘積。假如表emp有n行,dept表有m行,笛卡爾乘積的結(jié)果就是得到n * m行結(jié)果。

責任編輯:佚名 來源: 博客
點贊
收藏

51CTO技術(shù)棧公眾號