2015-09-18 72 views
0

我有以下代碼在數據庫上執行許多插入。有沒有辦法提高性能?怎麼樣?如何提高許多數據庫插入的性能?

public void insertMany(List<Trajectory> trajectories) { 
    try { 
     String sql = "insert into trajectory (id, datetime, longitude, latitude) values (?, ?, ?, ?)"; 
     PreparedStatement insert = MySqlDriver.getInstance().getConnection().prepareStatement(sql); 

     try { 
      for (Trajectory trajectory : trajectories) { 
       insert.setLong(1, trajectory.getId()); 
       insert.setTimestamp(2, Timestamp.valueOf(trajectory.getDateTime())); 
       insert.setDouble(3, trajectory.getLongitude()); 
       insert.setDouble(4, trajectory.getLatitude()); 
       insert.addBatch(); 
      } 

      insert.executeBatch(); 
     } finally { 
      insert.close(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

感謝

+1

你可以用你的代碼在一個事務中?在for()循環之外,嘗試找到類似於'BeginTransaction'的東西並在循環後添加'EndTransaction'。它可能有幫助。 –

回答

1

您應該使用useServerPrepStmts =假rewriteBatchedStatements =真

Connection connection = DriverManager.getConnection("jdbc:mysql://<host Name>:<port name>/schema?useServerPrepStmts=false&rewriteBatchedStatements=true", "DB Username", "DB Password") 

enter image description here

+0

根據我的經驗,將100行放入單個INSERT語句中可提高10倍。 –

+0

完美的作品,謝謝! – Andrey