【发布时间】:2017-02-24 17:09:35
【问题描述】:
我是否需要为created_at 添加索引才能进行这样的查询?
User.posts.where('created_at > ?', 3.months.ago)
posts 表通常很大(数十万条记录),但每个用户平均有几十个帖子,最多大约 100 个。
在这些类型的情况下,您是否应用了一些通用规则来设置索引?
【问题讨论】:
标签: ruby-on-rails postgresql indexing
我是否需要为created_at 添加索引才能进行这样的查询?
User.posts.where('created_at > ?', 3.months.ago)
posts 表通常很大(数十万条记录),但每个用户平均有几十个帖子,最多大约 100 个。
在这些类型的情况下,您是否应用了一些通用规则来设置索引?
【问题讨论】:
标签: ruby-on-rails postgresql indexing
首先这不是正确的查询
User.posts.where('created_at > ?', 3.months.ago)
因为这一定是这样的
current_user.posts.where('created_at > ?', 3.months.ago)
此外,添加索引不是强制性的,但为了获得更好的性能,您应该将index: true 添加到带有用户参考的 Post 表迁移中。
像这样的
t.references :user, index: true, foreign_key: true
【讨论】:
不,不要使用索引。使用缓存。我不确定您在代码中的哪个位置进行此调用,因此我无法给出更具体的答案。但本指南将帮助您朝着正确的方向开始。
http://edgeguides.rubyonrails.org/caching_with_rails.html#activesupport-cache-store
我为此使用 Redis。这颗宝石https://github.com/redis-store/redis-rails 对我来说效果很好。
【讨论】: