我有模型UserVote
,Comment
,Edit
等,所有模型都有user_id
属性。我正在尝试创建一种最近活动的时间轴,这让我分别查询所有5个模型并按日期时间排序。但是,对于具有大量活动的帐户,这5个查询需要很长时间才能执行。我想找到一种优化性能的方法,我认为组合5个查询可能会有效。
我无法提出任何有效的查询来实现我想要的目标。
感谢您的帮助!
答案 0 :(得分:2)
我认为评论中最好的建议来自Steve Jorgensen,“我通常通过在活动日志中添加记录,然后查询它来完成此操作。”。
如果您想将这个想法提升到新的水平,请查看sphinx(专为索引数据库内容而设计的搜索引擎)。您可以使用thinkphinx - http://freelancing-god.github.com/ts/en/轻松地与rails集成。
此外,正如蒂姆·彼得斯提出的那样,无论你如何解决这个问题,你都应该在所有的fkeys上都有索引 - http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index。
答案 1 :(得分: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进行排序并访问相关资源。