我有200K行要插入一个数据库表中.我试图在spring中使用jdbcTemplate.batchUpdate,以便每批次插入10,000个.但是,此过程会消耗太多时间(对于200K行,为7分钟).所以在数据库方面,我检查table_X中select count(*)插入的行数.我发现行数略有增加,预计为10K.任何人都可以解释是什么原因或者是应该在数据库端配置的东西吗?
PS:我正在使用sybase ….
最佳答案
网络上有很多方法可供使用.
性能直接取决于
性能直接取决于
>你写的代码
>您正在使用的JDBC驱动程序
>数据库服务器和您正在使用的连接数
>表索引导致插入缓慢
没有看你的代码,任何人都可以猜到,但没有人能找到确切的解决方案.
方法1
//insert batch example
public void insertBatch(final Listsql = "INSERT INTO CUSTOMER " +
"(CUST_ID,NAME,AGE) VALUES (?,?,?)";
getJdbcTemplate().batchUpdate(sql,new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps,int i) throws sqlException {
Customer customer = customers.get(i);
ps.setLong(1,customer.getCustId());
ps.setString(2,customer.getName());
ps.setInt(3,customer.getAge() );
}
@Override
public int getBatchSize() {
return customers.size();
}
});
}
参考
https://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/
http://docs.spring.io/spring-framework/docs/3.0.0.M4/reference/html/ch12s04.html
方法2.1
//insert batch example
public void insertBatch(final Listsql = "INSERT INTO CUSTOMER " +
"(CUST_ID,?)";
List
或者,您可以直接执行sql.
//insert batch example with sql
public void insertBatchsql(final String sql){
getJdbcTemplate().batchUpdate(new String[]{sql});
}
refernce
https://www.mkyong.com/spring/spring-simplejdbctemplate-batchupdate-example/
方法2.2
public class JdbcActorDao implements ActorDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List
方法2.3
public class JdbcActorDao implements ActorDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List
方法3:JDBC
dbConnection.setAutoCommit(false);//commit trasaction manually
String insertTableSQL = "INSERT INTO DBUSER"
+ "(USER_ID,USERNAME,CREATED_BY,CREATED_DATE) VALUES"
+ "(?,?)";
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setInt(1,101);
preparedStatement.setString(2,"mkyong101");
preparedStatement.setString(3,"system");
preparedStatement.setTimestamp(4,getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.setInt(1,102);
preparedStatement.setString(2,"mkyong102");
preparedStatement.setString(3,getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.executeBatch();
dbConnection.commit();
refernce
https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/
/*Happy Coding*/