一次性选择并删除数据库中的条目

时间:2014-07-10 14:59:54

标签: mysql sql

我想根据某个过滤器进行SELECT某些条目的查询,然后DELETE进行查询。

这通常和SELECT * FROM sometable WHERE foo = bar; DELETE * FROM sometable WHERE foo = bar;一样简单。但是,我正在处理一个非常非常大的表,所以我非常关心性能问题。因此,我想只查看一次表 ,并且对于所选的每一行,也要删除该行(上面的查询遍历表两次:一次用于{ {1}},再次SELECT)。

这可能吗?

1 个答案:

答案 0 :(得分:2)

如果您正在处理一个非常大的表,我建议您按块(使用限制)检索行并按主键排序,然后使用" in子句中的主键运行删除#34;

这样,当你删除行时,你不会锁定你的其他人并减慢你的服务器速度。

当你得到

时,

在你的代码中循环运行它们

SELECT * FROM sometable 
    WHERE foo = bar 
    AND  your_primary_key > last_checked_value 
    ORDER BY your_primary_key  limit 100; 


DELETE from sometable 
    WHERE  your_primary_key 
    IN (value1,value2,...,...,value100);