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

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

我在做一个功能,删除 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 强制查询一次不使用缓存嘛

我试过用一个变量存放 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?

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