使用ActiveRecords和Rails获取大量记录的最快方法(find_each很慢)



我有一个超过500k条记录的表,目前我正在以这种方式获取数据:

  Account.find_each(:conditions =>{:status =>STATUS[:waiting]}) do |user|    
    unless user.games.include? game
      begin
        user.account_games.create!(:game_id => game.id,:status  => STATUS[:waiting])
        user.activate            
      rescue Exception => e
        $LOG.error "Error : #{e.to_s}"
      end          
    end
  end

现在我不确定我在这里做错了什么,但有一点是肯定的,这很慢,我不知道是find_each还是其他什么,但如果你能给我任何提示,让它更快,我将不胜感激。

提前感谢

发生了两件事:

首先是选择查询-

 @account = Account.where(:status =>STATUS[:waiting])

第二个是在每个上创建

@account.each do |user|
 unless user.games.include? game
      begin
        user.account_games.create!(:game_id => game.id,:status  => STATUS[:waiting])
        user.activate            
      rescue Exception => e
        $LOG.error "Error : #{e.to_s}"
      end          
    end  
  end

更新:

有一个著名的Rails性能提示:Anand的查询优化。

还要检查QueryReviewer gem。

除此之外,还有许多因素可以加快性能,比如处于后活动记录查询接口优化中。

在模型中使用find_by_sql子句。

我想到了两个选项:

1) 在活动记录中全选,然后使用ruby进行迭代,将需要大量内存。

2) 用sql编写查询,并将其放入存储过程中,然后调用该过程。

相关内容

  • 没有找到相关文章

最新更新