add_index :microposts, [:user_id, :created_at]
我正在浏览 Michael Hartl 的 railstutorial 并注意到他正在使用一种称为multiple key index的东西。我知道这意味着 Active Record 同时使用两个键,但我不确定使用多个键索引的优缺点是什么。
如果有人能给出答案,我将不胜感激。
add_index :microposts, [:user_id, :created_at]
我正在浏览 Michael Hartl 的 railstutorial 并注意到他正在使用一种称为multiple key index的东西。我知道这意味着 Active Record 同时使用两个键,但我不确定使用多个键索引的优缺点是什么。
如果有人能给出答案,我将不胜感激。
任何索引都可以通过允许查询缩小要检查的行集来带来好处。
当您的查询包含这些多列的条件时,多列索引可以提供帮助。
例如:
SELECT * FROM Mytable WHERE user_id = 123 AND created_at > '2013-02-01'
多列索引缩小到与 user_id 123 关联的行的子集,然后在该子集中,它进一步将选择范围缩小到具有最近 created_at 值的那些。
如果没有索引中的第二列,RDBMS 必须先将 user_id 123 的所有行加载到内存中,然后才能确定它们是否通过标准。
有关更多信息,请参阅我的演示文稿 如何设计索引,真的。
通常,搜索键可以具有多个属性,我们将其称为复合键或多个键。
例如,考虑一个关于大学关系的索引。这里复合搜索键(course_id,year_of_enroll)。这样的索引将有助于找到所有具有特定课程 ID 的学生以及他们在大学注册的特定年份。这个索引搜索过程将精确地确定我们想要的相关记录。