true do |t| t.string "title" t.te-6ren">
gpt4 book ai didi

ruby-on-rails - Ruby on Rails 中多列的索引

转载 作者:行者123 更新时间:2023-12-03 04:58:28 26 4
gpt4 key购买 nike

我正在实现跟踪用户阅读过哪些文章的功能。

  create_table "article", :force => true do |t|
t.string "title"
t.text "content"
end

这是我迄今为止的迁移:

create_table :user_views do |t|
t.integer :user_id
t.integer :article_id
end

将始终查询 user_views 表以查找两列,而不仅仅是一列。我的问题是我的索引应该是什么样子。这些表的顺序是否有差异,是否应该有更多选项或其他什么。我的目标数据库是 Postgres。

add_index(:user_views, [:article_id, :user_id])

谢谢。

更新:
因为只有一行在两列中包含相同的值(因为知道 user_id 是否读取了article_id),所以我应该考虑 :unique 选项吗?如果我没记错的话,这意味着我不必自己进行任何检查,只需在用户每次访问文章时进行插入即可。

最佳答案

顺序在索引中确实很重要。

  1. 将最具选择性的字段放在前面,即最快缩小行数范围的字段。
  2. 只有当您从头开始按顺序使用索引的列时,才会使用索引。即,如果您对 [:user_id, :article_id] 建立索引,则可以对 user_iduser_id ANDarticle_id 执行快速查询,但不能对article_id

您的迁移 add_index 行应如下所示:

add_index :user_views, [:user_id, :article_id]
<小时/>

有关“唯一”选项的问题

在 Rails 中执行此操作的一个简单方法是在模型中使用具有范围唯一性validates,如下所示 ( documentation ):

validates :user, uniqueness: { scope: :article }

关于ruby-on-rails - Ruby on Rails 中多列的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com