我有一个包含超过 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/