Rails ActiveRecord 最好的全表扫描方法?

ibachue · 2012年10月12日 · 最后由 Jacob 回复于 2012年10月12日 · 2208 次阅读

求 ActiveRecord 中最好的全表扫描方法?我在生产环境的服务器上要跑个脚本,内容是遍历某表中每一条纪录,调用该纪录的某个方法,如果这个方法返回 nil,输出这条纪录的 id,本来用 Model.all.each 就行的,不过由于数据量较大,有两千万条,并且这个方法里内容也不是特别简单,需要多次 join,所以直接这么跑我担心会出事情,因此请教大家该怎么遍历才好,谢谢!

#1 楼 @aston 这个方法好 谢谢!

#2 楼 @iBachue #1 楼 @aston

昨天刚刚好也处理一个类似的问题,find_eachfind_in_batches 在两千万条记录前,可能都是浮云。真正高效解决这个办法的是 Raw SQL:

SELECT id FROM table_name WHERE column_name is NULL;

一个比较土的办法是每次只取少量记录处理,然后 sleep 一会再继续 - -

人家说了要调用一个方法,原始 sql 怎么行

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