新手问题 删除数据时候,总是使用缓存的问题

279959599 · 2018年05月07日 · 最后由 darkbaby123 回复于 2018年05月08日 · 745 次阅读

我在做一个功能,删除30天之前的数据,但是数据量挺大的,我就用了while,一直查询到没有三十天之前的数据结束,发现进入了无限循环,日志如下 CACHE (0.0ms) SELECT decision_detail_logs.* FROM decision_detail_logs ORDER BY decision_detail_logs.id ASC LIMIT 1 [["LIMIT", 1]] 这就能说明为什么进入无限循环了。

while语句是这样的

while DecisionLog.where("created_at < '#{31.days.ago}'").limit(100).size > 0 do

查询语句每次都使用的是cache。 有什么办法让while强制查询一次不使用缓存嘛

共收到 10 条回复

我试过用一个变量存放size,但是在while中,相同的where语句还是会读取缓存。不会重新查询然后付给变量

DecisionLog.uncached do .... end 试试

@teddyinfi 非常感谢,确实不在用cache了

find_each


奥,我还没试过删数据有没有问题。

DecisionLog.where("created_at < '#{31.days.ago}'").limit(100).count

Rei 回复

记得实现大体是,根据 primary key 做排序,取数据的条件是,要大于上一次取得的最后一个 primary key,limit 是给的 size 参数。

应该是可以用来做删除的?

哦,还有排序。。。要试试看才知道了。。。

exists? 感觉会好一些。

exists? 语义化,而且会快些(我测的)。

有什么需要级联删除吗

如果是仅仅是删除旧数据,为什么不用 SQL ?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册