使用JPA在MySQL中大量删除行的最佳实践

时间:2018-05-16 17:05:44

标签: mysql performance jpa sql-delete

标题几乎总结了我在这里寻找的东西。

我正在尝试使用Spring CrudRepository#delete(Iterable<T> batch)JPADeleteClauseentities.forEach(e->deleteClause.where(event.id.eq(e.getId()))); 从MySQL中删除&gt; 500000行,并详尽地创建&gt; 500000删除语句。

in

或通过Lists.partition(events, MAXIMUM_PACKET_SIZE).forEach( packet->deleteClause.where(event.id.in(packet.stream() .map(Event::getId) .collect( Collectors.toList()))) .execute() ); 子句

创建批次
ContentValues

由于MySQL本身的阈值,其中一些方法失败了

  

N字节的内存容量                      超出'range_optimizer_max_mem_size'。范围                      没有为此查询进行优化。

     

用于查询的数据包太大(4895385&gt; 1048576)。您可以通过设置max_allowed_pa​​cket'变量来更改服务器上的此值。

而最终成功的人非常耗时。

关于这种情况,是否有最佳实践?

我主要是寻找一种不会影响任何现有MySQL配置的方法。这是因为至少就MySQL服务器配置而言,我正在寻找最不普遍的解决方案。

0 个答案:

没有答案