Rails 迁移索引

Rails migrations indexing

这两种添加索引的方式有什么区别:

add_index :juice_ingredients, %i(juice_id ingredient_id)

和:

add_index :juice_ingredients, :juice_id
add_index :juice_ingredients, :ingredient_id

此外,我需要显式创建连接 table 还是仅 add_reference 就足够了?

第一个将在两列上创建一个索引。第二个将创建两个索引,每个索引都在自己的列上。哪个更好取决于您的应用程序、数据库和您的查询 运行。要弄清楚您需要阅读 "query optimization" 的数据库。

不同的是,第一个语句创建了一个多列索引(也叫复合索引),第二个语句创建了两个单列索引。

两个版本都会导致列 :juice_id:ingredient_id 在数据库级别被索引。但是,它们的行为有点不同。

为了更好地理解如何操作,您需要了解什么是数据库索引以及它的用途。

如果您可能在同一个查询中使用两个列来查询数据库,建议使用复合索引。此外,您可以使用具有唯一约束的索引来确保不会为特定键或键组合创建重复记录。

这里还有一些文章: