2012-04-10 255 views
11

我有一個從數據庫返回的遊標,執行時間爲31毫秒(毫秒)。ResultSet - 光標:rs.next()花費很多時間

但是,當我使用具有超過1500行此遊標來獲取行

ResultSet rs = (ResultSet)cstm.getObject(6); 

    while(rs.next()){ 
    system.out.println("..."); 
    } 

只是簡單的橫移通過遊標中的每一行它採取超過40秒(40000毫秒)

有什麼可以做了什麼?

回答

16

事實上,在默認情況下JDBC使用這樣獲取的10大小,如果不設置爲一個較大的值,你可以調用數據庫中記錄的旁邊正好150倍......

所有你需要做的通過將fetchSize設置爲.. 100來測試性能:例如:

statement.setFetchSize(100); 

您可以使用此數字來玩,以根據您的環境提高性能。

+0

感謝它的工作..相反,我用ResultSet.setFetchSize(100)... – faraz 2012-04-10 09:42:44

+0

偉大:) 100應該是好的 – Mik378 2012-04-10 09:44:48

+0

謝謝Mik378,你讓我的一天... !!! – 2013-10-01 17:49:37

4

你有你的光標超過1500行和RS什麼是數據庫返回只是到該遊標的引用。因此,當您調用rs.next()時,每次它進入數據庫cursr並獲取光標指針指向的當前記錄。

所以很顯然,每次訪問數據庫都需要一些時間,並且每次循環迭代獲取單個記錄的次數超過1500次。

+0

很好的解釋。 – Deepak 2017-04-29 08:48:31