繁体   English   中英

优化休眠删除操作

[英]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
    }
    }

对于这种特定的“问题”,没有更快的方法。 不幸的是,这不是性能问题,而是应用程序设计问题。

...但是...

您可以:

  1. 创建具有单个分区和一组与原始表相同的索引的表的列表分区副本。
  2. 使用insert /*+ append */ into the replica select * from the originalNOT的的CONDITION
  3. 将单个副本分区与原始表交换。
  4. 使用drop storage选项Truncate单个副本分区。

更具体的答案将需要更具体的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM