add_index 到数据模型 - Ruby on Rails 教程

Posted

技术标签:

【中文标题】add_index 到数据模型 - Ruby on Rails 教程【英文标题】:add_index to Data Model - Ruby on Rails Tutorial 【发布时间】:2013-11-22 20:17:50 【问题描述】:

我只是有点卡在 Ruby on Rails Tutorial.org 中的这段代码上。它的 add_index 部分究竟是做什么的?为什么有 3 行?

    class CreateRelationships < ActiveRecord::Migration
  def change
    create_table :relationships do |t|
      t.integer :follower_id
      t.integer :followed_id

      t.timestamps
    end

    add_index :relationships, :follower_id
    add_index :relationships, :followed_id
    add_index :relationships, [:follower_id, :followed_id], unique: true
  end
end

【问题讨论】:

【参考方案1】:

数据库索引是一种数据结构,可以提高查询速度 表中的操作。可以使用一个或多个创建索引 列,为快速随机查找和 记录访问的有效排序。 - TutorialPoint

基本上是用来加速查询的索引。

在示例中

add_index :relationships, :follower_id
add_index :relationships, :followed_id

follower_idfollowed_id 列创建索引,这将加快查找follower_id OR followed_id 的查询。它不会对您的列实施任何其他约束,例如 UNIQUE。所以它们可以有相同的值

这里

add_index :relationships, [:follower_id, :followed_id], unique: true

过程与上述相同,但约束条件是 follower_id AND followed_id 组合应该是不同的。如果您尝试在多行中为这些列复制相同的组合值,则会引发错误。

【讨论】:

感谢您的评论,那么我能否将索引与喜欢一本书的内容或一本书的“索引”进行比较,这样可以更快地找到可以缩小到信息范围的区域(表D b)?上述索引对于查询数据库是否实用且必要?为什么,为什么不呢? 是的,缩小信息范围会更快,但唯一的缺点是每当您添加/编辑行时,索引都需要时间。 好的,谢谢,但由于它们只有 2 列(follower_id 和 follow_id),为什么它们需要索引? (对不起,我只是想弄清楚它)。索引是否以某种方式对它们进行排序?向具有 2 列的表添加索引对我来说似乎有点奇怪,索引对行有什么作用?非常感谢您的帮助:) 没有。列或行无关紧要创建索引完全取决于您的选择。检查这个mysqlperformanceblog.com/2006/06/02/indexes-in-mysql @barlop 我说的是概念性的。在实践中,数据库维护 b 树以在 rid 表中记录数字。当数据库删除一条记录时,它会从表的每个索引中删除记录的条目,就像添加记录时它会将条目添加到 b 树中一样。因此,索引会减慢影响索引的插入、删除和更新,但会加快查询速度。

以上是关于add_index 到数据模型 - Ruby on Rails 教程的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ruby on Rails 将数据从控制器传递到模型?

将重复的SQL模型复制到Ruby on Rails postgresql模型中

将数据库模型转换为 Ruby On Rails 上的模型

Ruby on Rails Tutorial 第二章

如何使用 json 文件在 ruby​​ on rails 中填充模型(数据库)?

在 Ruby on Rails 应用程序中存储数据流行度