Performance and limitation issues between update() and batchUpdate() methods of NamedParameterJdbcTemplate

时间:2016-04-07 10:49:34

标签: java spring

I would like to know when to use update() or bacthUpdate() method from NamedParameterJdbcTemplate class of Spring framework.

Is there any row limitation for update()? How many rows can handle update() without having performance issues or hanging my db? Starting from how many rows batchUpdate() is getting good performance?

Thanks.

1 个答案:

答案 0 :(得分:4)

贝娄是我的观点:

  

何时使用Spring框架的NamedParameterJdbcTemplate类中的update()或bacthUpdate()方法

只要需要同时执行多个sql,就应该使用bacthUpdate()

  

update()有任何行限制吗?

这取决于您使用的数据库。但我还没有遇到行限制更新。当然,更新几行比更新许多行要快(例如,UPDATE ... WHERE id=1 vs UPDATE ... WHERE id > 1)。

  

有多少行可以处理update()而不会出现性能问题或挂起我的数据库?

这不确定。这取决于您使用的数据库机器性能等。如果您想知道确切的结果,可以查看数据库供应商的基准测试,或者你可以通过一些测试来测量它。

  

从batchUpdate()获得良好性能的行数开始?

事实上,当您批量batchUpdate()INSERTUPDATE时,通常会使用DELETE,这样可以提高性能。如:

BATCH INSERT

SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(employees.toArray());
int[] updateCounts = namedParameterJdbcTemplate.batchUpdate("INSERT INTO EMPLOYEE VALUES (:id, :firstName, :lastName, :address)", batch);
return updateCounts;

批量更新

List<Object[]> batch = new ArrayList<Object[]>();
    for (Actor actor : actors) {
        Object[] values = new Object[] {
                actor.getFirstName(),
                actor.getLastName(),
                actor.getId()};
        batch.add(values);
    }
    int[] updateCounts = jdbcTemplate.batchUpdate(
            "update t_actor set first_name = ?, last_name = ? where id = ?",
            batch);
    return updateCounts;

在内部,batchUpdate()将使用PreparedStatement.addBatch(),您可以查看一些spring jdbc tutorial.Batch operations以一个&#34;批次&#34;发送到数据库,而不是逐个发送更新。 一次性向数据库发送一批更新比一个接一个地发送更快,等待每个更新完成。在发送一批更新(仅一次往返)时,减少了网络流量,并且数据库可能能够并行执行某些更新。此外,当您在默认情况下在一个交易中使用batch operationbatchUpdate()时,数据库驱动程序必须支持batchUpdate()

您可以查看更多详细信息:

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-advanced-jdbc http://tutorials.jenkov.com/jdbc/batchupdate.html#batch-updates-and-transactions

希望你能提供帮助。