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.
答案 0 :(得分:4)
贝娄是我的观点:
何时使用Spring框架的NamedParameterJdbcTemplate类中的update()或bacthUpdate()方法
只要需要同时执行多个sql,就应该使用bacthUpdate()
。
update()有任何行限制吗?
这取决于您使用的数据库。但我还没有遇到行限制更新。当然,更新几行比更新许多行要快(例如,UPDATE ... WHERE id=1
vs UPDATE ... WHERE id > 1
)。
有多少行可以处理update()而不会出现性能问题或挂起我的数据库?
这不确定。这取决于您使用的数据库,机器性能等。如果您想知道确切的结果,可以查看数据库供应商的基准测试,或者你可以通过一些测试来测量它。
从batchUpdate()获得良好性能的行数开始?
事实上,当您批量batchUpdate()
,INSERT
或UPDATE
时,通常会使用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 operation
和batchUpdate()
时,数据库驱动程序必须支持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
希望你能提供帮助。