使用Rails迁移在数据库索引中的列顺序

时间:2014-09-02 11:44:45

标签: sql ruby-on-rails

我在Rails中几次看到以下迁移:

create_join_table :customers, :products do |t|
  # t.index [:customer_id, :product_id]
  # t.index [:product_id, :customer_id]
end

我不明白为什么我们需要两次声明相同的索引,或者索引中的列顺序具有很高的优先级?它会提高查询速度吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为解释索引的最佳方法是使用电话簿示例。电话簿按姓氏,名字排列。您可以通过姓氏或姓氏和名字轻松查找某人,但您不能通过他们的名字轻松查找某人。要只使用名字轻松搜索,您需要一个单独的索引。

回到您的示例,他们在customer_id和product_id上有一个索引,因此您可以轻松找到customer_id或customer_id和product_id。但仅第一个索引不允许您通过product_id轻松搜索。因此,第二个索引允许您轻松找到product_id或product_id和customer_id。

如果您有has_many :through relationship,则您的联接表应该在联接中涉及的两个属性上都有唯一索引作为复合键,这就是您所呈现的内容。

这个问题和答案是一个非常好的资源,可以提供有关何时在rails中使用索引的更多信息:When to add what indexes in a table in Rails