准备好的语句更新 - 性能改进
Posted
技术标签:
【中文标题】准备好的语句更新 - 性能改进【英文标题】:Prepared statement update - performance improvement 【发布时间】:2013-03-12 06:05:44 【问题描述】:我的应用程序中有一个 oracle 准备好的语句,它将一次性更新表中大约 100,000 条记录的状态。 例如:
UPDATE <TABLE NAME> SET STATUS=SUCCESS' where STATUS='INIT'
上述查询将一次更新大约 100,000 多条记录。 有什么方法可以提高性能,例如在准备好的语句上设置批处理/获取大小?如果我使用带有上述查询的准备好的语句,我将只执行一次,因为我没有设置任何参数来批量执行,我该怎么做?
【问题讨论】:
prepared statements 与大数据更新无关。它只是一种创建常规查询的方法。所以,这是一个查询必须是你关心的,而不是准备好的语句。 SQL 可以给你一些批处理的方法,但是你甚至没有提到你使用的是哪个 SQL。 十万单位在南亚以外是未知的,您可能想用 100,000 或 100000 替换它。 【参考方案1】:一种优化方法是不要一次运行一个查询(因为每个查询的系统延迟太慢...)
您可以使用批量更新。
如果您使用的是 Spring,请使用 batchUpdate
或者如果您直接处理 JDBC,则使用
preparedStatement.addBatch();
preparedStatement.executeBatch();
【讨论】:
但是我的查询是一个单一的查询。查询没有不同的输入。如何提高性能?【参考方案2】:将更新分成多个部分可能有助于将更新分成多个事务,但我将从您的数据库设置开始。如果更新需要很长时间,您可能没有将日志大小设置得足够高。也可能存在磁盘瓶颈。
【讨论】:
以上是关于准备好的语句更新 - 性能改进的主要内容,如果未能解决你的问题,请参考以下文章