mysql - 一次性从数据库中选择并删除条目

标签 mysql sql

我想进行一个查询,根据某个过滤器 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/

相关文章:

python - SQLAlchemy:在多对多关系中过滤运算符

mysql - 为文本类型列创建索引

python - 如何提高 SQLAlchemy 的性能?

php - 在 php 中从 mysql 表中选择一个字符串不显示输出

mysql - 使用 Python 2.7 和 MySQLdb 将二进制数据插入 MySQL 中的 blob 列时如何避免编码警告

mysql - 根据先前的 ID 更新下一行

php - 使用 PHP 更新 mysql 数据

mysql - 如何将 tMysqlRow 中的选择查询结果记录到 Talend 中的 tLogRow?

php - 如何使用 MySQL 选择 ID M 之后开始的 N 行

mysql - 显示自用户上次评论以来的天数