我有一個從數據庫返回的遊標,執行時間爲31毫秒(毫秒)。ResultSet - 光標:rs.next()花費很多時間
但是,當我使用具有超過1500行此遊標來獲取行
ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
只是簡單的橫移通過遊標中的每一行它採取超過40秒(40000毫秒)
有什麼可以做了什麼?
我有一個從數據庫返回的遊標,執行時間爲31毫秒(毫秒)。ResultSet - 光標:rs.next()花費很多時間
但是,當我使用具有超過1500行此遊標來獲取行
ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
只是簡單的橫移通過遊標中的每一行它採取超過40秒(40000毫秒)
有什麼可以做了什麼?
事實上,在默認情況下JDBC使用這樣獲取的10大小,如果不設置爲一個較大的值,你可以調用數據庫中記錄的旁邊正好150倍......
所有你需要做的通過將fetchSize設置爲.. 100來測試性能:例如:
statement.setFetchSize(100);
您可以使用此數字來玩,以根據您的環境提高性能。
你有你的光標超過1500行和RS什麼是數據庫返回只是到該遊標的引用。因此,當您調用rs.next()時,每次它進入數據庫cursr並獲取光標指針指向的當前記錄。
所以很顯然,每次訪問數據庫都需要一些時間,並且每次循環迭代獲取單個記錄的次數超過1500次。
很好的解釋。 – Deepak 2017-04-29 08:48:31
感謝它的工作..相反,我用ResultSet.setFetchSize(100)... – faraz 2012-04-10 09:42:44
偉大:) 100應該是好的 – Mik378 2012-04-10 09:44:48
謝謝Mik378,你讓我的一天... !!! – 2013-10-01 17:49:37