У меня есть три модели, которые выглядят примерно так:
class Bucket < ActiveRecord::Base
has_many :entries
end
class Entry < ActiveRecord::Base
belongs_to :submission
belongs_to :bucket
end
class Submission < ActiveRecord::Base
has_many :entries
belongs_to :user
end
class User < ActiveRecord::Base
has_many :submissions
end
Когда я получаю коллекцию записей, делая что-то вроде:
@entries = Entry.find(:all,
:conditions => ['entries.bucket_id = ?', @bucket],
:include => :submission)
Производительность довольно быстрая, хотя я получаю большое количество дополнительных запросов, потому что представление использует объект Submission.user. Однако, если я добавлю пользователя в оператор: include, производительность станет ужасной, и потребуется более минуты, чтобы вернуть в общей сложности 50 записей и заявок, распределенных по 5 пользователям. Когда я запускаю соответствующие команды SQL, они выполняются менее чем за секунду - производительность запросов SQL одинакова для каждого набора запросов.
@entries = Entry.find(:all,
:conditions => ['entries.bucket_id = ?', @bucket],
:include => {:submission => :user})
Почему эта вторая команда имеет такую ужасную производительность по сравнению с первой?