Оптимизировать Rails нетерпеливый запрос на загрузку для поиска всех - PullRequest
2 голосов
/ 25 декабря 2009

В приложении Rails 2.3.5 у меня есть что-то вроде следующих моделей:

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

И когда я звоню

Foo.all(:include => :bars)

Я вижу следующие запросы в консоли:

 SELECT * FROM "foos"
 SELECT "bars".* FROM "bars" WHERE ("bars".foo_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21))

со всеми идентификаторами foo в предложении where.

Полагаю, это не оптимальный запрос, хотя число идентификаторов может быть большим, и мне нужно предварительно загрузить все «бары». Кроме того, на самом деле у меня есть не две модели, а их цепочка.

Есть ли способ сделать запрос на загрузку похожим на

SELECT "bars".* FROM "bars" 

когда я использую найти все?

1 Ответ

4 голосов
/ 25 декабря 2009

Это на самом деле оптимизация, фактически Rails меняет стратегию запросов, если количество идентификаторов увеличивается.

Вы также можете использовать :join вместо :include

...