2012-10-15 69 views

回答

4

一般來說,Oracle在開始返回數據之前不需要實現整個結果集(當然,Oracle有必要實現結果集才能在開始返回數據之前進行排序)。假設您的查詢不需要整個結果集被實現,那麼無論客戶端進程是TOAD還是SQL * Plus還是您編寫的JDBC應用程序,Oracle都會開始將數據返回到客戶端進程。當客戶端請求更多數據時,Oracle將繼續執行查詢並返回結果的下一頁。這使TOAD能夠相對快速地返回前500行,即使Oracle最終需要很多小時才能執行整個查詢並將最後一行返回給客戶端。

+0

謝謝。但是我發現,如果我通過在表上執行select *來創建視圖,然後執行:從視圖中選擇*,則需要更長的時間。爲什麼是這樣? – Victor

+0

@Kaushik - 應該沒有區別。你是否看到了一個不同的查詢計劃?兩個查詢中是否都有一個謂詞('WHERE'子句)? –

+0

抱歉,我錯了。視圖有一些複雜的謂詞,這就是問題所在。 – Victor

0

Toad只返回前500行的性能,但如果要通過Oracle接口(例如JDBC)運行該查詢,則會返回整個結果。我最好的猜測是解釋計劃在沒有得到記錄子集的情況下向你顯示結果;這就是我如何使用它。除了我自己的經驗之外,我沒有這方面的資料。

+0

謝謝。但我的問題是,即使只返回500行,結果如此快速?它會不會獲取整個記錄集,然後從中獲取500行? – Victor

+0

好的區別,對不起,我誤解了。上面的答案解釋了它。 –