2013-03-30 90 views
1

在Oracle中,我嘗試以不同方式運行相同的層次查詢:使用CONNECT BY和遞歸CTE。根據執行計劃CONNECT BY是可取的。何時使用Oracle中的遞歸CTE

有沒有什麼情況,當遞歸CTE在Oracle中工作得更快(或者有什麼情況可以使用它們時)?

謝謝。

+1

遞歸CTE提供了對實際遞歸(深度優先,寬度優先)的更多控制,但除此之外,我看不到有理由更喜歡通過'connect by'。 –

回答

2

「根據執行計劃,CONNECT BY是最好的。」

這並不奇怪。 CONNECT BY語法幾十年來一直是Oracle工具箱的一部分,所以Oracle有足夠的時間調整優化器以高性能的方式處理它。遞歸CTE更新。

此外,我認爲CBO將更難理解遞歸CTE的成本,因爲它們是編程式的而不是數據驅動的。另一方面,很多人(不只是初學者)在抓住Oracle分層語法方面存在問題,而遞歸是一種標準的編程概念。所以也許這就是他們有用的地方。

順便說一句,我不認爲應該在性能至關重要的情況下使用分層查詢。如果您需要快速並經常以分層格式檢索大量數據,則應該考慮採用不同的方法,例如實現傳遞閉包。 Find out more.