2017-04-18 112 views
0

我的SQL查詢只需要1分鐘即可執行,但獲取可達到100萬的總行需要將近11分鐘。提取行比運行查詢需要更長的時間

以下是僞代碼:

stmt.setFetchSize(5000); 

ResultSet rs = stmt.executeQuery(); 

while(rs.next()){ 
    //Do some task 
} 

我試圖改變提取大小從100到80000,但沒有什麼幫助,但它仍然需要超過10分鐘。 如果我刪除while循環並簡單地執行查詢,那麼整個過程只需要幾分鐘,這意味着查詢正在快速執行。

有關如何提高獲取行的時間的任何建議?

+0

什麼是「//做一些任務」?如果數據庫管理系統本身可以高效地完成這些工作,那麼你就會浪費時間在本地提供數據。 – paxdiablo

+0

不可以在數據被提取後在DBMS中完成。我們需要對java層的數據進行大量的分析。 – Lokesh

+0

嘗試conn.setAutoCommitMode(false); – JRR

回答

0

你可以在應用層面做的唯一一件事就是: 1.返回較少的數據(通過更少的行或列少) 2.增加數組提取大小(從而通過SQL減少網絡往返*淨哪些是一個「聊天協議」) 3.擁有更快的網絡(從而減少在網絡往返中花費的時間) 4.將應用程序服務器與同一局域網上的應用程序服務器共同定位到數據庫(實質上是一個更快的網絡)。