我想根据某个过滤器进行SELECT
某些条目的查询,然后DELETE
进行查询。
这通常和SELECT * FROM sometable WHERE foo = bar; DELETE * FROM sometable WHERE foo = bar;
一样简单。但是,我正在处理一个非常非常大的表,所以我非常关心性能问题。因此,我想只查看一次表 ,并且对于所选的每一行,也要删除该行(上面的查询遍历表两次:一次用于{ {1}},再次SELECT
)。
这可能吗?
答案 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);