2

我有模型UserVote,,,等CommentEdit所有这些都有一个user_id属性。我正在尝试创建一种最近活动的时间线,这让我分别查询我的所有 5 个模型并按日期时间排序。但是,对于具有大量活动的帐户,这 5 个查询需要很长时间才能执行。我想找到一种优化性能的方法,我认为结合 5 个查询可能会起作用。

我无法提出任何有效的查询来实现我想要的。

谢谢你的帮助!

4

2 回答 2

2

我认为评论中最好的建议来自 Steve Jorgensen,“我通常看到这是通过将记录添加到活动日志然后查询它来完成的。”。

如果您想将这个想法提升到一个新的水平,请查看 sphinx(为索引数据库内容而设计的搜索引擎)。您可以使用 thinksphinx - http://freelancing-god.github.com/ts/en/轻松与 rails 集成。

此外,正如 Tim Peters 提出的,无论您如何解决这个问题,您都应该在所有 fkey 上都有索引 - http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index

于 2012-10-09T07:00:55.490 回答
1

我认为对这个问题使用多态关联是个好主意 - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class TimeLine < ActiveRecord::Base
  belongs_to :timelineable, :polymorphic => true
end

class UserVote < ActiveRecord::Base
  has_many :time_lines, :as => :timelineable
end

class Comments < ActiveRecord::Base
  has_many :time_lines, :as => :timelineable
end

现在您可以对 time_line 进行排序并访问相关资源。

于 2012-10-09T12:04:22.317 回答