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

279959599 · May 07, 2018 · Last by darkbaby123 replied at May 08, 2018 · 1204 hits

我在做一个功能,删除 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

Reply to Rei

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

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

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

exists? 感觉会好一些。

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

有什么需要级联删除吗

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

You need to Sign in before reply, if you don't have an account, please Sign up first.