gpt4 book ai didi

mysql - Rails 3 - delete_all 不支持限制范围,而 MySQL 支持它

转载 作者:可可西里 更新时间:2023-11-01 08:10:51 24 4
gpt4 key购买 nike

我有一个包含 900 万条记录的表。我定期将此数据同步到第三方。我保留了一个列,告诉特定行是否已经同步。

现在我需要删除将近 600 万 同步行,我不确定是否运行

Model.where(:sync_flag => true).delete_all

会是个好主意。每秒有数百次插入,我认为这可能会导致以一种会伤害/阻止插入的方式锁定表(这里需要 MySQL 专家来纠正)

有了上面的序言,我想到了在循环中使用一个带有limit子句的delete来删除所有的记录,直到没有留下,但是有以下内容

Model.where(:sync_flag => true).limit(5000).delete_all

它引发了一个异常delete_all 不支持限制范围

是否有一种解决方法可以在不离开 Rails 环境的情况下解决该问题?

最佳答案

ActiveRecord::Base.connection.send(:delete_sql,'delete from <table name> where sync_flag = true limit 1000')

你必须使用 send因为 'delete_sql' 是 protected ,但这有效。

另一种解决方案可能是

Model.connection.exec_delete('DELETE FROM <table name> where sync_flag=true LIMIT 10000', 'DELETE', [])

它将返回受影响的行并且还将通过 Rails 记录器记录查询。

关于mysql - Rails 3 - delete_all 不支持限制范围,而 MySQL 支持它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34544209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com