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

标签 ruby-on-rails ruby ruby-on-rails-3 rails-activerecord

我有一个包含超过 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 Performance Tip: Query Optimization作者:阿南德

另请检查QueryReviewer gem .

除此之外,还有许多因素可以加快性能,例如 在帖子 Active Record Query Interface Optimization 中.

关于ruby-on-rails - 使用 ActiveRecords 和 Rails 获取大量记录的最快方法(find_each 很慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870557/

相关文章:

ruby - 如何拆分数组中的字符串?

ruby - 预购和后购访客

ruby-on-rails-3 - 如何将 Best In Place 与 twitter bootstrap 结合使用

ruby-on-rails-3 - 导轨 : email confirmation RESTful (PUT) URL in mailer

ruby-on-rails - ruby on rails - rack-cors 具有不同资源的多个来源

ruby-on-rails - Ruby on Rails RSpec 错误:Encoding::UndefinedConversionErrors

ruby - 如何在 Windows 7 上正确安装 Compass?

ruby-on-rails - 如何使用 Paypal 或 Stripe 向一位收款人延迟付款?

css - 如何在 rails 2.3 中预编译 css 样式表?

ruby-on-rails - Rails 3,仅比较rails中两个日期时间列的日期