java – 两种JDBC查询批处理方法中的哪一种更快?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 两种JDBC查询批处理方法中的哪一种更快?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1741字,纯文字阅读大概需要3分钟。
内容图文
![java – 两种JDBC查询批处理方法中的哪一种更快?](/upload/InfoBanner/zyjiaocheng/734/a25bb0f1277c4f2eb5428d8dd1614fbb.jpg)
我试图在具有数百万条记录的表上使用rownum在多个批次中运行更新语句.
第一种方法是将所有查询一起批处理,然后运行executeBatch()方法,如下所示,
for (i = num; i < limit; i += num) {
String query = "update Table set someColumn ='T' where rownum<=" + i;
preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
dbConnection.commit();
第二种方法是运行一个批量更新语句并在每个批次之后提交,如下所示,
String query = "update Table set someColumn ='T' where rownum<=?";
preparedStatement = dbConnection.prepareStatement(query);
int count = 1;
while (count > 0) {
preparedStatement.setInt(1, num);
count = preparedStatement.executeUpdate();
dbConnection.commit();
}
我认为第二种方法更清洁,因为它在每批次之后提交,但是第一种方法比第二种方法花费的时间少得多.
有人可以向我解释为什么会这样吗?或者,如果我的方法和理解有任何错误.
解决方法:
Can someone explain to me why this is so?
这里可以优化许多不同的东西:
> JDBC / ODBC驱动程序和db引擎完成的工作准备和
解析声明
>客户端和数据库服务器之间的往返流量
> db引擎打开和关闭的工作(即提交
或回滚)一个交易
您的示例是优化不同的东西:
>通过使用绑定参数(如第二个示例中所示),仅限您
准备一次声明,这减少了所做的工作
ODBC / JDBC驱动程序,也可能是数据库引擎.
>通过较少经常执行批次(第一个示例),您正在减少
客户端和服务器之间的往返次数.
>通过较少提交(再次提供第一个例子),您将减少数量
数据库需要打开和关闭事务的次数.
正如您所发现的那样,瓶颈成为开仓和平仓交易的开销.多次往返也没有帮助.这些比不使用绑定参数更昂贵.
令人高兴的是,在这个例子中,您可以优化所有这三件事.您可以使用绑定参数,一次性将所有命令发送到数据库,然后执行单个提交.请参阅Jean de Lavarene的答案.
请注意行为的变化:如果您在一个批处理中提交,则一个错误将导致批处理中的所有内容回滚.这可能正是您想要的,但如果没有,这些考虑可能优先于性能.
内容总结
以上是互联网集市为您收集整理的java – 两种JDBC查询批处理方法中的哪一种更快?全部内容,希望文章能够帮你解决java – 两种JDBC查询批处理方法中的哪一种更快?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。