在我的Rails应用程序中,我做了很多范围搜索来分组对象,比如
scope :best_of_the_week, ->(time) do
start_time = time.beginning_of_week
end_time = time.end_of_week
where("created_at > ? AND created_at < ?", start_time, end_time).where('votes_count > ?', 300).order('votes_count DESC').first(8)
end
在这种情况下,我是否需要向created_at
添加索引?那votes_count?
另外,我怎样才能优雅地将前两个搜索结合起来?或者将它们组合起来有什么不同?
答案 0 :(得分:0)
如果您希望此查询具有最高性能,请为两者创建索引。如果你不想创建太多的索引,你应该索引created_at,日期似乎确实有更大的范围随着时间的推移(和数据库的大小)。
我喜欢使用 find_by_sql 并使SELECT检索基本数据以提高性能,如果你有太多var chars字段,这将产生很好的影响。
仅适用于辛辣糖
where("between ? and ?", start_time, end_time).(other stuff)