如果我在迁移中有以下行,postgresql会添加隐式索引吗?我应该为外键明确添加索引吗?模型包含has_many和belongs_to。
t.integer :club_id,
:null => false,
:options => "CONSTRAINT fk_transactions_club REFERENCES clubs(id)"
答案 0 :(得分:0)
来自fine manual:
<强> 5.3.5。外键
[...]
由于引用表中的DELETE
行或引用列的UPDATE
将需要扫描引用表以查找与旧值匹配的行,因此通常最好对引用进行索引列。因为并不总是需要这个,并且有很多关于如何索引的选择,所以外键约束的声明不会自动在引用列上创建索引。
你是FK正在引用PK,所以你可能不必担心UPDATE。如果您的引用表(具有club_id
的表)将会很大并且您希望经常删除club
行,那么club_id
上的某种索引应该删除club
行更快。如果您在club_id
上没有索引,则尝试删除club
行将需要对包含club_id
的表进行表扫描,并且表扫描不是您的朋友。
所以答案可能是,这取决于club
将如何使用。