[英]Optimize of hibernate delete operation
下面的代码有效,但是当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
}
}
对于这种特定的“问题”,没有更快的方法。 不幸的是,这不是性能问题,而是应用程序设计问题。
...但是...
您可以:
insert /*+ append */ into the replica select * from the original
表NOT
的的CONDITION
。 drop storage
选项Truncate
单个副本分区。 更具体的答案将需要更具体的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.