我想知道什么时候使用Spring框架的类update()或bacthUpdate()方法NamedParameterJdbcTemplate。
有行限制update()吗?update()没有性能问题或挂起数据库可以处理多少行?从几行开始batchUpdate()获得良好的性能?
谢谢。
小智 5
以下是我的观点:
\n\n\n\n\n何时使用 Spring 框架的 NamedParameterJdbcTemplate 类中的 update() 或 bacthUpdate() 方法
\n
你应该使用bacthUpdate()当需要同时执行多个sql时,
\n\n\nupdate() 有行数限制吗?
\n
这应该取决于您使用的数据库。但我还没有达到更新的行限制。当然\xef\xbc\x8更新几行比更新很多行要快。(例如,UPDATE ... WHERE id=1vsUPDATE ... WHERE id > 1)。
\n\n\n有多少行可以处理 update() 而不会出现性能问题或挂起我的数据库?
\n
这个还不确定。这取决于您使用的DB、机器性能等。如果您想知道确切的结果,可以查看DB Vendor's Benchmark,或者你可以通过一些测试来衡量它。
\n\n\n\n\n从多少行开始,batchUpdate() 可以获得良好的性能?
\n
事实上,batchUpdate()在执行批处理时常用INSERT,UPDATE或者DELETE,这会提高很多性能。例如:
批量插入:
\n\nSqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(employees.toArray());\nint[] updateCounts = namedParameterJdbcTemplate.batchUpdate("INSERT INTO EMPLOYEE VALUES (:id, :firstName, :lastName, :address)", batch);\nreturn updateCounts;\nRun Code Online (Sandbox Code Playgroud)\n\n批量更新:
\n\nList<Object[]> batch = new ArrayList<Object[]>();\n for (Actor actor : actors) {\n Object[] values = new Object[] {\n actor.getFirstName(),\n actor.getLastName(),\n actor.getId()};\n batch.add(values);\n }\n int[] updateCounts = jdbcTemplate.batchUpdate(\n "update t_actor set first_name = ?, last_name = ? where id = ?",\n batch);\n return updateCounts;\nRun Code Online (Sandbox Code Playgroud)\n\n内部batchUpdate()会使用PreparedStatement.addBatch(),可以查看一些spring jdbc教程。。Batch operations一次性发送到数据库,而不是逐一发送更新。\n一次性向数据库发送一批更新,比逐一发送、等待每个更新完成要快。发送一批更新涉及的网络流量较少(仅 1 次往返),并且数据库可能能够并行执行某些更新。此外,当batch operation您使用batchUpdate()和batchUpdate()在一个事务中的情况。
更多详情您可以查看:
\n\nhttps://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-advanced-jdbc \n http://tutorials.jenkov.com/jdbc/batchupdate.html #批量更新和交易
\n\n希望你一定要帮忙。
\n| 归档时间: |
|
| 查看次数: |
4033 次 |
| 最近记录: |