Java 高效地更新多行
如何高效地更新多行Java 高效地更新多行,java,mysql,Java,Mysql,如何高效地更新多行 一句话 多语句 单个语句字符串是否会变得太大,SQL无法处理(10000多个条目/行) 我有一个要修改的变量,它是status: | id | status | 我的数据存储在列表(ArrayList)中。请参阅准备好的语句: 在循环外创建准备好的语句,然后在循环内使用更新的参数执行准备好的语句。在MySQL中使用该命令可能更有效。前提是您可以将输入结构化为CSV格式。适当地使用REPLACE和/或IGNORE关键字。这将比MySQL中1000条语句的速度快得多。如果您的状
status
:
| id | status |
我的数据存储在列表(ArrayList)中。请参阅准备好的语句:
在循环外创建准备好的语句,然后在循环内使用更新的参数执行准备好的语句。在MySQL中使用该命令可能更有效。前提是您可以将输入结构化为CSV格式。适当地使用REPLACE和/或IGNORE关键字。这将比MySQL中1000条语句的速度快得多。如果您的状态是有限的值集,那么我将根据状态将列表分成子集,并更新每条语句的行集。即使特定STAU有10K行,您也可以在一次调用中更新多行(使用in运算符)。这将减少应用程序更新所需的往返时间。您也可以尝试这样的批量更新,尽管我不确定它们是否有效:
update `id_status_table` `row`
set `status` = (
select case `row`.`id` when 1 then 'one'
when 2 then 'two'
else 'three or more' end
);
虽然10000行的查询字符串可能太大,但您可以对每1000行应用这样的查询。如果您想使用JDBC并使其高效,您应该明确检查批插入性能(也适用于更新) 一般来说,您需要向连接字符串中添加
rewriteBatchedStatements=true
,例如:
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/database_name?rewriteBatchedStatements=true","login", "password");
这将允许驱动程序将准备好的语句重新写入更有效的表单。您可以更新更新背后的需求吗?是一天一次还是每次。该过程每小时完成一次,但更新量会有很大变化。目前最糟糕的情况是每次更新大约11000行。你能解释一下这个问题吗。基于条件的单语句更新状态可以做到这一点。@ejb_,问题是我看不出哪种方式最有效。在一个字符串中进行所有更新,或者在for循环中逐个进行更新。我不知道构建大型更新字符串是否存在任何风险/后果。更新表1 set status=where id=您能否解释如何链接值和条件,或者它基于用户\外部源的输入我的数据存储在ArrayList中,这会改变什么吗?必须说这是更好的方法。将数据写入文件(假设列表包含Id和状态),将数据加载到临时表中。在这个简单的更新之后,trickYou必须自己编写代码,将ArrayList中的数据写入磁盘上的临时csv文件,并发出引用该文件的加载数据查询。