Ruby on rails 在Rails中,find_each和where之间有什么区别?
在Rails中,和都用于从ActiveRecord支持的数据库检索数据 您可以将查询条件传递到何处,如: 您可以传递批大小来查找每个,如: 但以下两种代码之间有什么区别Ruby on rails 在Rails中,find_each和where之间有什么区别?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Activerecord,在Rails中,和都用于从ActiveRecord支持的数据库检索数据 您可以将查询条件传递到何处,如: 您可以传递批大小来查找每个,如: 但以下两种代码之间有什么区别 # code 1 Person.where("age > 21").find_each(batch_size: 50) do |person| # processing end # code 2 Person.where("age > 21").each do |person| # processing e
# code 1
Person.where("age > 21").find_each(batch_size: 50) do |person|
# processing
end
# code 2
Person.where("age > 21").each do |person|
# processing
end
代码1是否每次批量检索50个元组,代码2是否一次检索所有元组?欢迎提供更多详细说明
我的意见是:
where和find_都可以用于批检索,但用户可以在使用find_时定义批大小。
find\u each不支持传递查询条件。
如果我的理解有误,请更正。活动记录关系不会自动将所有记录加载到内存中 调用每个时,所有记录都将加载到内存中。当您调用find_each时,记录将以给定的批大小批量加载到内存中 因此,当您的查询返回的记录数量对于服务器的可用资源来说太多时,使用find_将是一个很好的选择
这基本上就像使用ruby的惰性枚举来惰性枚举每个片段,然后每个片段都非常方便。所以代码1可以根据记录大小和批大小多次执行SQL,代码2只执行SQL一次?是的,这是我的理解。如果您查看开发日志或rails控制台中的sql输出,您将看到类似于Users.for_eachbatch_size{| u |}选择用户。*从Users.id>51的用户中选择用户。*从Users.id>51的用户中选择限制50。。。等等
Hedgehog.find_each(batch_size: 50).map{ |p| p.to_json }
# code 1
Person.where("age > 21").find_each(batch_size: 50) do |person|
# processing
end
# code 2
Person.where("age > 21").each do |person|
# processing
end