ruby-on-rails - Rails 4 或 5,索引位于 Postgresql 中的 "updated_at"列。这是什么意思?

标签 ruby-on-rails database postgresql ruby-on-rails-4 ruby-on-rails-5

我正在使用 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/

相关文章:

ruby-on-rails - rails "No route matches POST/images/1"错误

sql - 社交网络应用程序中友谊的最佳数据库架构

database - 我应该如何为分片建模数据?

sql - 将时间范围分为全天范围和之前/之后的剩余小时数

c++ - error LNK2019 函数中引用的未解析外部符号dbbind

Hibernate 错误 : current transaction is aborted, 命令被忽略,直到事务 block 结束

ruby-on-rails - Ruby on Rails 中的枚举

ruby-on-rails - 复合主键与唯一对象 ID 字段

database - 文件系统和数据库之间的写入性能

ruby-on-rails - 朱比 :- Unable to install devise on windows using jruby