首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Mysql性能
EN

Stack Overflow用户
提问于 2012-01-26 08:43:07
回答 2查看 165关注 0票数 1

哪种方法更好地使用jdbc在mysql db中执行批删除。

我有一个主键的列表。需要删除它们。

  1. 使用批处理更新api
  2. ,其where子句具有in子句.
EN

回答 2

Stack Overflow用户

发布于 2012-01-26 08:56:00

在WHERE子句中使用IN更快,因为它减少了数据传输。但是,这是一种权衡,因为如果查询太长,MySQL需要时间来解析它。如果你有太多的记录要删除,我建议你把它分成10K长的查询。

另一种解决方案是,当您有太多的记录要删除时,如果您使用另一个查询获得这些记录,您可以直接使用,例如:

代码语言:javascript
运行
复制
DELETE FROM table1 WHERE id IN (SELECT id FROM table2 WHERE status = 1)
票数 0
EN

Stack Overflow用户

发布于 2012-02-06 04:02:00

我遇到了类似的问题,决定使用准备好的语句和JDBC驱动程序对这两种方法进行基准测试。我的应用程序有3个(索引很重)表。我有一个查询来检索需要从每个表中删除的键列表(该键在所有三个表中都有索引,其中一个表中的主键)。

首先我试过:

代码语言:javascript
运行
复制
SELECT id FROM table1 WHERE delete_condition

使用

代码语言:javascript
运行
复制
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行的删除速率。

第二种方法是:

代码语言:javascript
运行
复制
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 ()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9015602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档