當我打開TOAD並執行select * from table
時,結果(前500行)幾乎立即返回。但解釋計劃顯示全表掃描和表是非常巨大的。 結果如此之快?oracle執行全表掃描,但很快返回結果
回答
一般來說,Oracle在開始返回數據之前不需要實現整個結果集(當然,Oracle有必要實現結果集才能在開始返回數據之前進行排序)。假設您的查詢不需要整個結果集被實現,那麼無論客戶端進程是TOAD還是SQL * Plus還是您編寫的JDBC應用程序,Oracle都會開始將數據返回到客戶端進程。當客戶端請求更多數據時,Oracle將繼續執行查詢並返回結果的下一頁。這使TOAD能夠相對快速地返回前500行,即使Oracle最終需要很多小時才能執行整個查詢並將最後一行返回給客戶端。
Toad只返回前500行的性能,但如果要通過Oracle接口(例如JDBC)運行該查詢,則會返回整個結果。我最好的猜測是解釋計劃在沒有得到記錄子集的情況下向你顯示結果;這就是我如何使用它。除了我自己的經驗之外,我沒有這方面的資料。
謝謝。但我的問題是,即使只返回500行,結果如此快速?它會不會獲取整個記錄集,然後從中獲取500行? – Victor
好的區別,對不起,我誤解了。上面的答案解釋了它。 –
- 1. DynamoDB掃描FilterExpression返回空結果
- 2. 查詢執行全表掃描
- 3. DynamoDB掃描函數返回正確的結果,但與DynamoDBResponseError
- 4. redis掃描返回空結果,但非零遊標
- 5. Oracle索引 - 全表掃描/鎖定
- 6. 連續WifiManager掃描掃描結果
- 7. 的Oracle SQL - 避免全表掃描(如果)
- 8. 查詢高度並行性的Oracle表導致全表掃描
- 9. 全表掃描或索引掃描
- 10. Oracle在轉換時區時進行全表掃描
- 11. 避免在Oracle中進行全表掃描
- 12. DISTINCT是否使用多個表達式執行全表掃描?
- 13. zxing條碼掃描器沒有返回結果
- 14. nmap wordpress腳本掃描不返回結果
- 15. 內存掃描器總是返回相同的結果
- 16. 掃描儀不返回正確的結果?
- 17. 在Oracle中執行函數X次並返回結果集
- 18. 表掃描如何返回比表中的行更多的行?
- 19. 正則表達式掃描結果
- 20. NullPointerException空白掃描結果
- 21. MongoDB無條件計數 - 立即返回或掃描全表?
- 22. MySQL的使用OR語句返回全表掃描
- 23. SQLite在使用時總是執行全表掃描?
- 24. MySQL的執行全表掃描,即使存在索引
- 25. MySQL的搜索與或執行全表掃描
- 26. 爲什麼要執行表掃描?
- 27. process.hrtime()的執行時間返回完全不同的結果
- 28. Cassandra RandomPartitioner和「全表掃描」
- 29. 避免全表掃描
- 30. 避免全表掃描
謝謝。但是我發現,如果我通過在表上執行select *來創建視圖,然後執行:從視圖中選擇*,則需要更長的時間。爲什麼是這樣? – Victor
@Kaushik - 應該沒有區別。你是否看到了一個不同的查詢計劃?兩個查詢中是否都有一個謂詞('WHERE'子句)? –
抱歉,我錯了。視圖有一些複雜的謂詞,這就是問題所在。 – Victor