【发布时间】:2013-02-13 01:03:48
【问题描述】:
add_index :microposts, [:user_id, :created_at]
我正在浏览 Michael Hartl 的 railstutorial 并注意到他正在使用一种称为多键索引的东西。我知道这意味着 Active Record 同时使用两个键,但我不太确定使用多个键索引的优缺点是什么。
如果有人能给出答案,我将不胜感激。
【问题讨论】:
标签: sql ruby-on-rails
add_index :microposts, [:user_id, :created_at]
我正在浏览 Michael Hartl 的 railstutorial 并注意到他正在使用一种称为多键索引的东西。我知道这意味着 Active Record 同时使用两个键,但我不太确定使用多个键索引的优缺点是什么。
如果有人能给出答案,我将不胜感激。
【问题讨论】:
标签: sql ruby-on-rails
任何索引都可以通过允许查询缩小要检查的行集来带来好处。
当您的查询包含多个列的条件时,多列索引会有所帮助。
例如:
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。
【讨论】:
一般来说,搜索键可以有多个属性,我们称之为复合键或多键。
例如,考虑一个关于大学关系的索引。这里复合搜索键(course_id,year_of_enroll)。这样的索引将有助于找到所有具有特定课程 ID 的学生以及他们在大学注册的特定年份。 这个索引搜索过程将精确地确定我们想要的相关记录。
【讨论】: