ruby-on-rails - 什么时候使用 preload 或 eager_load 或 includes 更好?

标签 ruby-on-rails

<表类="s-表"> <头> SQL 包含连接 在内存中加载相关记录 执行两个查询 <正文> 预加载 否 是 是 包括 是(左外连接) 是 有时 预加载 (左外连接) 是 没有

我是从概念上知道的。

我想知道什么时候使用哪个 API。我搜索但没有找到确切答案。

最佳答案

includes 选择是使用preload 还是eager_load。如果您对 includes 做出的决定不满意,您必须使用 eager_loadpreload


来自 https://engineering.gusto.com/a-visual-guide-to-using-includes-in-rails/ :

:includes 什么时候使用:preload?

在大多数情况下 :includes 将默认使用方法 :preload 将触发 2 个查询:

  • 加载与领先模型相关的所有记录
  • 根据关联模型或主导模型上的外键加载与主导模型关联的记录

:includes 什么时候使用 :eager_load?

:includes 将默认使用 :preload 除非您在后续子句中引用正在加载的关联,例如 :where 或 :order。以这种方式构建查询时,您还需要显式引用预先加载的模型。

Employee.includes(:forms).where('forms.kind = "health"').references(:forms)

关于ruby-on-rails - 什么时候使用 preload 或 eager_load 或 includes 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69242991/

相关文章:

ruby-on-rails - Rails 5 - 在编辑操作中使用范围来查找特定实例的相关子项

ruby-on-rails - rails : Errors close to particular fields in forms

ruby-on-rails - Ruby on Rails 项目的 CSS Sprite 生成器

ruby-on-rails - 基于 Ajax 的 Web 应用程序和身份验证 : session or token?

ruby-on-rails - 更新 ActiveRecord (Rails) 中的当前值

ruby-on-rails - 使用 Ruby On Rails 进行事务操作

ruby-on-rails - cucumber :从表中选择一个元素进行删除或添加

mysql - "Access denied for user ' 用户名 '@' 本地主机 ' (using password: YES)"使用 Capistrano 部署 Rails 时

ruby-on-rails - 运行 rake db :seed isn't loading from seeds. rb

ruby-on-rails - rails : How to generate and seed db with 100k random users with associations