Ruby on Rails中ActiveRecord为何频繁执行两次查询?
- 内容介绍
- 文章标签
- 相关推荐
本文共计299个文字,预计阅读时间需要2分钟。

我学习ActiveRecord和SQL,我的印象是:使用`include`进行SQL查询。例如,如果这样写:`Show.first :include=> :artist`,它将执行一个查询,返回第一个节目和艺术家。但看生成的SQL,我有点困惑。
我只是学习ActiveRecord和SQL而且我的印象是:include做一个SQL查询.所以,如果我这样做:Show.first :include => :artist
它将执行一个查询,该查询将返回第一个节目和艺术家.但是看看生成的SQL,我看到两个查询:
[2013-01-08T09:38:00.455705 #1179] DEBUG -- : Show Load (0.5ms) SELECT `shows`.* FROM `shows` LIMIT 1 [2013-01-08T09:38:00.467123 #1179] DEBUG -- : Artist Load (0.5ms) SELECT `artists`.* FROM `artists` WHERE `artists`.`id` IN (2)
我看到了作者之一的Railscast视频:include vs:join我在控制台上看到了输出SQL,这是一个很大的SQL查询,但它只是一个查询.我只是想知道这是不是应该是这样或者我错过了什么?
使用:includes是一种提供急切加载的解决方案.它将在您的示例中加载最多两个查询.如果您要更改查询Show.all:include => :艺术家.这也只会调用两个查询.更好的解释:Active Record Querying Eager Loading
本文共计299个文字,预计阅读时间需要2分钟。

我学习ActiveRecord和SQL,我的印象是:使用`include`进行SQL查询。例如,如果这样写:`Show.first :include=> :artist`,它将执行一个查询,返回第一个节目和艺术家。但看生成的SQL,我有点困惑。
我只是学习ActiveRecord和SQL而且我的印象是:include做一个SQL查询.所以,如果我这样做:Show.first :include => :artist
它将执行一个查询,该查询将返回第一个节目和艺术家.但是看看生成的SQL,我看到两个查询:
[2013-01-08T09:38:00.455705 #1179] DEBUG -- : Show Load (0.5ms) SELECT `shows`.* FROM `shows` LIMIT 1 [2013-01-08T09:38:00.467123 #1179] DEBUG -- : Artist Load (0.5ms) SELECT `artists`.* FROM `artists` WHERE `artists`.`id` IN (2)
我看到了作者之一的Railscast视频:include vs:join我在控制台上看到了输出SQL,这是一个很大的SQL查询,但它只是一个查询.我只是想知道这是不是应该是这样或者我错过了什么?
使用:includes是一种提供急切加载的解决方案.它将在您的示例中加载最多两个查询.如果您要更改查询Show.all:include => :艺术家.这也只会调用两个查询.更好的解释:Active Record Querying Eager Loading

