【发布时间】:2011-06-22 17:54:37
【问题描述】:
我在需要显示一些关于“发布”类中数据的图表的页面上遇到了很多问题。以下是涉及的模型。
class Primary
has_many :secondary
has_many :posts, :through => :secondary
has_many :authors, :through => :secondary
end
class Secondary
belongs_to :primary
has_many :posts
has_many :authors
end
class Post
belongs_to :secondary
belongs_to :author
end
class Author
has_many :posts
belongs_to :secondary
end
Author 类有一个可以过滤的属性:“category”。
我有一个查询过滤用户在帖子数据中想要的内容并将其显示在页面上:
@primary.posts.count(:include => :author, :conditions => @conditions)
这个一直很好用,但是现在涉及到的Authors数量上升了很多,当用户尝试按类别过滤时,我添加条件“authors.category IN (1, 2)”,然后查询开始需要超过 50 秒才能完成,而不是通常的 2、3 秒。
我可以做些什么来改善这一点?我整天都在做这个,我唯一想到的就是在帖子上存储类别值,但这意味着当作者添加大量检查和工作以更新所有帖子的数据时已编辑:(
提前谢谢你。
【问题讨论】:
-
您的数据库中的
category列是否有索引? -
rails 生成的 sql 语句是什么?
-
类别已编入索引,是的。我目前正在表上运行 VACUUM ANALYZE,因为这种巨大的超时仅发生在特定类别值上,该类别值的帖子比其他值少得多。所有其他的运行时间大约为 1 秒,但此特定值需要 30 多秒。
-
发布您的查询生成的 SQL。这是优化的第一站。
标签: ruby-on-rails performance include