我想进行一个查询,根据某个过滤器 SELECT
获取一些条目,然后 DELETE
获取它们。
这通常就像 SELECT * FROM sometable WHERE foo = bar; DELETE * FROM sometable WHERE foo = bar;
一样简单。但是,我正在处理一个非常非常大的表,因此非常关心性能问题。因此,我只想遍历表一次,并且对于所选的每一行,也删除该行(上面的查询遍历表两次:一次 for SELECT
,再次为 DELETE
)。
这可能吗?
最佳答案
如果您正在处理一个非常大的表,我建议您按 block (使用限制)检索行并按主键排序,然后使用“in 子句”中的主键运行删除
这样,当您删除行时,您就不会锁定其他行并减慢您的服务器速度。
当你得到时在你的代码中循环运行它们
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);
关于mysql - 一次性从数据库中选择并删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24679911/