2013-04-22 125 views
3

不知何故,我的MySQL插入真的很慢。即使當我使用「批量插入」。大約50個插入需要2000毫秒。這是正常還是有辦法改善我的代碼?Java - 爲什麼我的插入太慢?

  String sql = "INSERT INTO wlw (wlw_level, wlw_name, wlw_url, wlw_processing, wlw_finished, wlw_source)" 
         + "VALUES(?, ?, ?, ?, ?, ?)"; 
      PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

      for(QueryStore qs : QueryStore) { 
       preparedStatement.setInt(1, qs.level); 
       preparedStatement.setString(2, qs.anchor); 
       preparedStatement.setString(3, qs.url); 
       preparedStatement.setInt(4, qs.processing); 
       preparedStatement.setInt(5, qs.finished); 
       preparedStatement.setLong(6, qs.id); 
       preparedStatement.addBatch(); 
       System.out.println("Adding URL: " + qs.url); 
      } 
      System.out.println("Start saving ..."); 
      long then = System.currentTimeMillis(); 
      preparedStatement.executeBatch(); 
      long now = then - System.currentTimeMillis(); 
      System.out.println("SAVING END - Took me " + now + "ms"); 

感謝您的任何建議!

+0

一個可能的優化。沒有使用'Statement.RETURN_GENERATED_KEYS',因爲你不使用返回的生成鍵。 – 2013-04-22 20:45:21

+1

這是一個innoDB表? – Khalil 2013-04-22 20:48:36

+1

每次調用執行'INSERT'操作的方法時,您是否正在使用連接池或手動創建連接?你的桌子上有沒有觸發器,或者是你的桌子上的任何顯示器?你插入了多少數據?你的表管理了多少個索引?它使用很多外鍵嗎? – 2013-04-22 20:54:27

回答

4

嘗試將rewriteBatchedStatements=true添加到您的連接參數中。

+0

令人驚歎。現在速度非常快。非常感謝你! – Crayl 2013-04-22 21:11:24