JDBCTemplate根据时间删除记录,永远不会完成

时间:2017-08-24 06:57:50

标签: spring spring-jdbc jdbctemplate

我的代码中的以下语句永远不会完成执行。我不确定,如果下面的查询有问题。

     public void delete(String username) {
        LocalDateTime sixMonthsOld = LocalDateTime.now().minusMonths(6);
        this.jdbcTemplate.update("delete from log_access where accesstime <= ?", Timestamp.valueOf(sixMonthsOld));
      }

但是当我尝试其他查询时,它运行正常

  public void delete() {
    this.jdbcTemplate.update("delete from log_access where username <= ?", "aaa");    

  }

DB中几乎没有50到100条记录。不确定删除查询为什么需要很长时间。

1 个答案:

答案 0 :(得分:0)

我想这是因为需要删除大量数据而导致超时或回滚段太小而无法保留这么多记录。 将删除拆分为一组较小的。

 public void delete(String username) {
    LocalDateTime sixMonthsOld = LocalDateTime.now().minusMonths(6);
    for (int i=0; i<maxIdInTheLogAccesstable; i+=1000) {
        this.jdbcTemplate.update("delete from log_access where accesstime <= ? and id<?", Timestamp.valueOf(sixMonthsOld), i);
    }
  }

因此,您将逐步删除。 Id范围1000可以修改为10k或更多,具体取决于您拥有的实际最大ID和数据量以及服务器。