2015-09-18 3 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

По моему опыту, 10-кратное улучшение при установке 100 строк в одном заявлении INSERT. –

+0

отлично работает, спасибо! – Andrey

Смежные вопросы