2017-05-05 50 views
1

我最近了解到,在甲骨文,我們可以這樣做在Oracle中始終使用連接子句是否好?

select t1.a, t2.b 
from table1 t1, table2 t2 
where t1.x = t2.x 

這相當於

select t1.a, t2.b 
from table1 t1 
join table2 t2 on (t1.x=t2.x) 

是否有任何性能差異還是有,我們應該用一種風格,而不是任何其他參數另一個?

+1

我不認爲有任何性能差異,但第二種風格是最新(推薦),提供更好的可讀性。 –

+1

rdbms非常聰明,可以將您的查詢優化爲第二個版本。但你應該自己動手。 –

+0

@TimSchmelter謝謝,通過說RDBM將查詢轉換爲第二種類型?是否因爲它更接近機器可讀格式?在這個過程中發生了什麼? – wh408

回答

4

通常它們是相同的,但是較低的一個 - 也稱爲「ANSI連接語法」應該是Oracle推薦的首選,並且由於許多其他原因,請參閱OUTER JOIN文檔。

只有一個例外(我知道):當您使用FAST REFRESH創建MATERIALIZED VIEW時,您必須使用舊的Oracle連接語法,否則FAST REFRESH是不可能的。

很久以前我在Oracle爲此創建了一個SR。 Oracle不認爲這是一個錯誤,而是「缺少文檔」。據我所知,這個限制/ bug仍然沒有解決。

+1

當Oracle首次引入ANSI 92語法9i他們已經有了多年爲舊語法編寫的查詢優化規則。他們並沒有重新編寫優化器,而是將ANSI 92 SQL轉換爲較舊的語法並對其進行優化。這導致了偶爾的性能異常,特別是(並不意外)在外部連接周圍。多年來,大多數這些異常現象都消失了,但[還有一些人應該小心](https://jonathanlewis.wordpress.com/2010/12/03/ansi-argh/) – APC

相關問題