我有三个模型,看起来像这样:可怜的Ruby on Rails的性能:包括
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})
为什么第二个命令与第一个命令相比会有如此糟糕的表现?
只是为了澄清:您直接执行查询,因为它们出现在您的development.log中? – 2010-03-18 02:56:34
是的,我完全按照它们出现在开发日志中那样添加了查询。看起来这可能是一个对象序列化/反序列化问题,因为视图需要28秒才能在用户包含的情况下运行。 – 2010-03-18 17:43:16