2010-08-04 38 views
0

我有PL/SQL函數返回包含28列和8100行的光標。當我從SQL Plus執行該功能時,我馬上就得到了結果,並且在SQL Developer中,我正在運行花費時間(大約80秒)的腳本。 Java代碼也是如此。當列數減少到2時,我在不到4秒的時間內得到響應。有人可以解釋在這種情況下發生了什麼?爲什麼SQL Developer和SQL Plus中的Oracle PL/SQL響應時間有所不同?

+0

那麼SQL Developer是用Java編寫的,反之,SQL * Plus是本地代碼。所以有一個線索。你的桌子是什麼樣的? – APC 2010-08-04 19:03:31

+0

這是一個遠程數據庫嗎?如果SQL * Plus是相同的服務器數據庫上運行,並且SQL開發人員訪問它在網絡上,那麼這可能是一個因素,特別是如果你有LOB數據,或返回列的大小是未知的(所以它必須分配比實際需要更多的內存和帶寬)。據推測,你可以通過在本地運行Java版本來檢查。同樣從Java你可以指定列的大小,看看是否有幫助。 – 2010-08-04 19:59:21

+0

相當明顯沒有,SQL Developer有除了流線型的工具,是由與數據庫巧妙對接,叫更多的層:SQLPLUS。一些會降低性能的東西,只是在屏幕上顯示數據。如果讓大量數據在您的窗口滾動,它可能會嚴重減慢。在這種情況下,只需將另一個不相關的窗口(Windows資源管理器,瀏覽器......)全屏顯示,直到查詢完成。 – tvCa 2014-12-30 17:02:49

回答

1

做出的改變在SQL Developer中,默認爲50。如果你從它撞擊到500看到的結果「SQL數組提取大小」最簡單的實驗,有答案。

有趣的是,等效SQL Plus參數的默認值僅爲15,但正如APC所述,SQL Plus具有本地優勢。

如果要更改「SQL數組提取大小」沒有做任何事情,來看看接下來的事情就是JDBC設置,這些設置SQL Developer使用和SQL * Plus不會。

0

除了我之前好答案...

SQL * PLUS只要第一行返回,而SQL Developer有找到結果集的大小來發送數據直接回到屏幕在顯示記錄之前返回。

這也許可以解釋爲什麼有用於SQL開發的延遲,特別是如果結果集較大或需要較長時間才能完全恢復(例如,如果執行路徑是複雜的)。