20

我只是有点卡在 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
4

1 回答 1

27

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

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

在示例中

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

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

这里

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

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

于 2013-11-11T07:20:20.273 回答