add_index :microposts, [:user_id, :created_at]
我正在阅读Michael Hartl的轨道教程并发现他正在使用一种名为多键索引的东西。我知道这意味着Active Record同时使用两个键,但我不确定使用多个键索引的优点和缺点是什么。
如果有人能给出答案我会非常感激。
答案 0 :(得分:15)
任何索引都可以通过允许查询缩小要检查的行集来提供好处。
当您的查询包含多个列的条件时,多列索引可以提供帮助。
例如:
SELECT * FROM Mytable WHERE user_id = 123 AND created_at > '2013-02-01'
多列索引缩小到与user_id 123关联的行的子集,然后在该子集内,它进一步将选择范围缩小到具有最近created_at值的那些。
如果没有索引中的第二列,RDBMS必须先将所有的user_id 123行加载到内存中,然后才能确定它们是否超出了条件。
有关详细信息,请参阅我的演示文稿How to Design Indexes, Really。
答案 1 :(得分:0)
通常,搜索键可以包含多个属性,我们称之为compsite键或多个键。
举个例子,考虑一下大学关系的指数。这里是复合搜索键(course_id,year_of_enroll)。这样的索引有助于找到所有具有特定课程ID的学生,特别是他们已经入读大学的年份。 该索引搜索过程将精确地确定我们所需的记录。