【问题标题】:Performance on rails 2 :include轨道 2 上的性能:包括
【发布时间】: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


【解决方案1】:

也许你可以试试batch finding,你也可以看看Rails 2 guides "4.5 Batch Processing"

如果你有时间你也可以看看这个screencast on scaling rails

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 2016-10-12
    • 2013-02-13
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多