哪种方法更好地使用jdbc在mysql db中执行批删除。
我有一个主键的列表。需要删除它们。
发布于 2012-01-26 08:56:00
在WHERE子句中使用IN更快,因为它减少了数据传输。但是,这是一种权衡,因为如果查询太长,MySQL需要时间来解析它。如果你有太多的记录要删除,我建议你把它分成10K长的查询。
另一种解决方案是,当您有太多的记录要删除时,如果您使用另一个查询获得这些记录,您可以直接使用,例如:
DELETE FROM table1 WHERE id IN (SELECT id FROM table2 WHERE status = 1)
发布于 2012-02-06 04:02:00
我遇到了类似的问题,决定使用准备好的语句和JDBC驱动程序对这两种方法进行基准测试。我的应用程序有3个(索引很重)表。我有一个查询来检索需要从每个表中删除的键列表(该键在所有三个表中都有索引,其中一个表中的主键)。
首先我试过:
SELECT id FROM table1 WHERE delete_condition
使用
for each delete_id
DELETE FROM table1 WHERE table1.id = delete_id
DELETE FROM table2 WHERE table2.id = delete_id
DELETE FROM table3 WHERE table3.id = delete_id
loop
我发现这提供了每秒74行的删除速率。
第二种方法是:
DELETE FROM table2 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
DELETE FROM table3 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
DELETE FROM table1 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition)
提供每秒43,026行的删除速率。我不知道MySQL下发生了什么,但从现在开始,我将使用DELETE从表中删除id IN ()方法。
https://stackoverflow.com/questions/9015602
复制相似问题