gpt4 book ai didi

java - IN 子句效率中的准备语句设置值

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:26 24 4
gpt4 key购买 nike

代码应该是独立于数据库的,所以我使用的是普通的 sql。

我的查询可以在运行时更改,比如 table1 更改为 table2。但是假设对于 table1 查询,我必须更新 2000 条记录,槽为 50,这意味着只要处理完 50 条记录,我就会提交。

我有两种方法可以在 sql 语句的 IN 子句中设置值。我想知道以下代码中哪一个更有效(priority is optimization and maintainability is second)?

PreparedStatement preparedStatement = sqlObj.prepareStatement(
"UPDATE table1 column1=? WHERE table_id IN (" + StringUtils.repeat("?,", paramArray.length-1)+ "?)");
preparedStatement.setInt(1, 0);
for(int idx = 0; idx < paramArray.length; idx++) {
preparedStatement.setInt(idx+2, paramArray[idx]);
}
preparedStatement.executeQuery();

或者

PreparedStatement preparedStatement = sqlObj.prepareStatement(
"UPDATE table1 column1=? WHERE table_id IN (?)");
for(int idx = 0; idx < paramArray.length; idx++) {
preparedStatement.setInt(1, 0);
preparedStatement.setInt(2, paramArray[idx]);

preparedStatement.addBatch();
}
preparedStatement.executeBatch();

编辑:假设 param.length 是 50,整个代码执行 40 次,即处理 2000 条记录

所以在第一种情况下它会追加 50 ?然后为他们设置变量进行一次更新查询,在第二种情况下,它将创建一批 50 个更新查询。

最佳答案

似乎在第二个你根本不需要 IN,你可以使用 WHERE table_id = ?因为你每次都设置 1 个值。在这种情况下,秒会更快,因为您将使用 Batch。

请看 Why are batch inserts/updates faster? How do batch updates work?

如果你使用的是 Oracle,你也可以这样做

create or replace TYPE "NUMBER_ARRAY" IS TABLE OF NUMBER(18,0);   

在 Java 代码中

PreparedStatement preparedStatement = sqlObj.prepareStatement(
"UPDATE table1 column1=? WHERE table_id IN (SELECT column_value FROM TABLE (CAST(? AS number_array)))");
JdbcUtils.setArray(2, tableIds.toArray(new Long[tableIds.size()]), ps);

关于java - IN 子句效率中的准备语句设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26886387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com