java - 批量更新执行中的更新查询需要很长时间
问题描述
System.out.println("multipleBatchUpdateCheckErroreValues.update starting time------"+ new DateTime());
multipleBatchUpdateCheckError(
vSql.toString(), //sql query
pPriceMap.toList(), //rows
50, //batch size
new ObjectPreparedStatementSetter() {
public void setValues(Object row, PreparedStatement ps, int rowNo) throws SQLException {
Price vPrice = (Price) row;
prepareValues(vPrice, ps, UPDATE);
}
});
}
System.out.println("multipleBatchUpdateCheckErroreValues.update ending time------"
+ new DateTime());
在上面的代码中,更新花费了太多时间来完成。如何优化以下代码执行时间?
SQL 查询是
UPDATE PRICE_T
SET TO_TIME = ?,
PRICE_EXCLUDING_TAX = ?,
PRICE_INCLUDING_TAX = ?,
REASON = ?,
PRIORITY_TYPE = ?,
TRANS_TIME = ?,
DEL_TIME = ?,
UPD_TIME = ?
WHERE CLASS = ?
and CLASS_TYPE = ?
and COUNTRY_CODE = ?
and ITEM_NO = ?
and ITEM_TYPE = ?
and CURRENCY_CODE = ?
and PRICE_TYPE = ?
and FROM_TIME = ?
总行数 10k,列 14,处理时间为 35 分钟。
解决方案
在 where 子句的所有 8 列上创建索引后,执行时间减少到 1 秒。
推荐阅读
- wordpress - 多站点内容同步 Wordpress 问题
- android - 如何修复此错误?错误:找不到符号 Vholder.setData(mValues.get(position));
- filter - 没有为 scipy.signal.butter 定义名称为“b”的错误。怎么了?
- javascript - n秒后datatable.js ajax livereload
- javascript - 在 arr 中生成 4 个唯一的随机数?
- dialogflow-es - 无法创建新代理
- c# - jQuery:当我有多个具有相同名称但唯一 ID 的元素时,我可以按名称选择一个元素并读取它的 ID 吗?
- anylogic - 代理当时不能在多个流程图中。至少有两个流程图块存在冲突:
- python - 我必须通过熊猫提取与“西瓜”行相对应的.csv中的所有行
- azure - 如何从 azure 管道中的变量模板文件中迭代所有变量?