【发布时间】:2014-08-12 23:10:21
【问题描述】:
下面的代码可以运行,但是当 SQL 删除超过一百万行时会出现性能问题。删除 2M 表需要很长时间,大约需要 1 小时。我们无法控制传递给我们的 sql 条件。有没有更好的方法让它运行得更快?
除此之外,我们没有数据库管理员访问权限,因此存储过程不能成为解决方案。任何帮助是极大的赞赏。谢谢
示例 SQL 查询
DELETE TBL_A WHERE ID IN (SELECT ID FROM TBL_B WHERE 1=1 AND TBL_B.BD < TO_DATE(ADD_MONTHS(SYSDATE, -240)));
删除方法
public void deleteRows(String table, String condition){
StringBuilder sql = new StringBuilder();
sql.append("DELETE TABLE=:TABLE WHERE CONDITION=:CONDITION ");
try{
transaction = session.beginTransaction();
int rows = session.createSQLQuery(sql.toString()).setParamater("TABLE",TABLE).setParameter("CONDITION",CONDITION).executeUpdate();
transaction.commit();
}
catch{
//logic here
}
}
【问题讨论】:
标签: java hibernate jakarta-ee oracle11g