我正在使用 Rails 5:
def index
@posts = Post.all
fresh_when(etag: @posts, last_modified: @posts.maximum(:updated_at))
end
我的一个 friend 告诉我,如果我要使用这些方法(stale 或 fresh_when),“我需要在“updated_at”列上建立索引。
这是什么意思?
最佳答案
索引的目标是加快在数据库中查找记录的过程。如果您计划经常通过 updated_at
字段查找模型记录,您应该考虑添加一个索引。
您的 friend 可能告诉您向 updated_at
列添加索引,因为 fresh_when
引用了它。 http://apidock.com/rails/ActionController/ConditionalGet/fresh_when
但是,在 fresh_when
方法的情况下,您的记录已经被加载,因此您不会看到自记录以来索引 updated_at
字段的任何好处已经在内存中了。
简而言之,索引使数据库读取速度更快。缺点是它们会减慢写入数据库的速度。我认识的大多数 Rails 开发人员只为关联索引外键,因为外键通常是一个整数,编写/索引相对便宜。例如:
class Post
has_many :comments
end
add_index :comments, :post_id
这应该加快查询速度,例如:
Post.find(:id).comments
但是,如果您要为模型中的每个字段建立索引,您可能会体验到更快的查找速度,但每次更新模型时都必须重建索引,因此写入数据库的速度会慢得多。
最重要的是,您应该三思而后行。
关于ruby-on-rails - Rails 4 或 5,索引位于 Postgresql 中的 "updated_at"列。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42770609/