《 The Rails 5 Way》中的这两个陈述是否相互矛盾?

时间:2018-11-10 23:01:41

标签: ruby-on-rails join rails-activerecord

我现在正在阅读“ The Rails 5 Way”,并且已经到达涵盖includesjoins的部分。到目前为止,我的理解是includes最适合于急切地将数据库数据加载到内存中以避免N + 1个查询,而joins更适合于对查询进行简单过滤基于关联表的结果集,而无需实际访问那些关联表行上的属性:

1

  

包含(*关联)   Active Record可以消除   通过让您指定需要加载的关联来进行“ N + 1”查询   在您的查找器中使用includes方法或选项。活动记录   将以最少数量的查询加载这些关系   可能。

2

  

joins(表达式) joins的工作方式与使用INNER的方式类似   在结果SQL查询中加入。知识的关键点之一   了解内部联接是因为它们仅返回记录集   与要连接的表匹配。如果在   联接在另一侧缺少其对应的行,也不会   返回结果集中。

但是,在第202页,我看到以下内容:

3

  

到目前为止,joins方法最常见的用法是热切获取   单个SELECT语句中关联对象的数据,以便   防止所谓的N + 1查询。

引号#3中描述的用法似乎比引号#2更适合引号#1,即它谈到了通过急于加载数据来减少N + 1查询的目标(我知道{{1 }}可以通过调用includeseager_load来实现)。老实说,报价#3似乎根本不匹配#1。

我的问题是-我们如何才能使这3个引号相互协调?还是他们已经彼此同步,而我只是想念一些东西?

0 个答案:

没有答案