我应该添加外键索引的Rails Postgres

时间:2013-06-07 16:21:47

标签: ruby-on-rails postgresql

如果我在迁移中有以下行,postgresql会添加隐式索引吗?我应该为外键明确添加索引吗?模型包含has_many和belongs_to。

t.integer :club_id,
          :null => false,
          :options => "CONSTRAINT fk_transactions_club REFERENCES clubs(id)"

1 个答案:

答案 0 :(得分:0)

来自fine manual

  

<强> 5.3.5。外键
  [...]
  由于引用表中的DELETE行或引用列的UPDATE将需要扫描引用表以查找与旧值匹配的行,因此通常最好对引用进行索引列。因为并不总是需要这个,并且有很多关于如何索引的选择,所以外键约束的声明不会自动在引用列上创建索引。

你是FK正在引用PK,所以你可能不必担心UPDATE。如果您的引用表(具有club_id的表)将会很大并且您希望经常删除club行,那么club_id上的某种索引应该删除club行更快。如果您在club_id上没有索引,则尝试删除club行将需要对包含club_id的表进行表扫描,并且表扫描不是您的朋友。

所以答案可能是,这取决于club将如何使用