Ruby on rails 何时在Rails中的created_at列上设置索引

Ruby on rails 何时在Rails中的created_at列上设置索引,ruby-on-rails,postgresql,indexing,Ruby On Rails,Postgresql,Indexing,对于这样的查询,是否需要在处创建的中添加索引 User.posts.where('created_at > ?', 3.months.ago) posts表通常相当大(数十万条记录),但每个用户平均有几十条帖子,最多100条左右 在这些类型的情况下设置索引是否有一些通用规则?首先,这不是正确的查询 User.posts.where('created_at > ?', 3.months.ago) 因为这一定是这样的 current_user.posts.where('created

对于这样的查询,是否需要在处创建的
中添加索引

User.posts.where('created_at > ?', 3.months.ago)
posts表通常相当大(数十万条记录),但每个用户平均有几十条帖子,最多100条左右


在这些类型的情况下设置索引是否有一些通用规则?

首先,这不是正确的查询

User.posts.where('created_at > ?', 3.months.ago)
因为这一定是这样的

current_user.posts.where('created_at > ?', 3.months.ago)
t.references :user, index: true, foreign_key: true
另外,添加索引也不是强制性的,但为了获得更好的性能,您应该将
index:true
添加到带有用户引用的Post表迁移中。 像这样的

current_user.posts.where('created_at > ?', 3.months.ago)
t.references :user, index: true, foreign_key: true

不,不要使用索引。使用缓存。我不确定您在代码中的何处拨打此电话,因此我无法给出更具体的答案。但这本指南会让你从正确的方向开始


我用Redis来做这个。这个gem对我来说很好。

恐怕这不是问题的答案。问题不是如何创建索引,而是何时创建索引。对不起,我不理解你的问题。我会更新我的答案。这不是我的问题,但无论如何,你为什么主张不使用索引,这是获得更好性能的绝对基本方法?如果缓存响应,则只运行一次查询,如果使用索引,则每次加载页面时都运行查询。随着时间的推移,缓存总是比添加索引更快。我确实回答了你的问题,是“我需要为这样的查询在创建时添加索引吗?”“答案是不,这是浪费你的时间,不会像缓存那样帮助你提高网站的速度。这不是我的问题,@randomTheory是作品。总之,缓存很有价值,但这并不意味着您不应该在第一次执行查询时使用索引来加快速度。在数据库中使用索引并不意味着不能在Rails中使用缓存。