下面的代码有效,但当SQL删除超过一百万行时会出现性能问题。 2小时表需要很长时间才能删除大约1小时。我们无法控制传递给我们的sql条件。有没有更好的方法让这种运行更快?
除此之外,我们没有DB管理员权限,因此存储过程无法成为解决方案。任何帮助是极大的赞赏。感谢
示例SQL QUERY
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
}
}
答案 0 :(得分:1)
这个特定的“问题”没有更快的方法。不幸的是,这不是性能问题,而是应用程序设计问题。
......但是......
你可以:
insert /*+ append */ into the replica select * from the original
表与NOT
的{{1}}一起使用。CONDITION
具有Truncate
选项的单个副本分区。更具体的答案需要更具体的问题。