什么是多键索引?

jee*_*ace 10 sql ruby-on-rails

add_index :microposts, [:user_id, :created_at]
Run Code Online (Sandbox Code Playgroud)

我正在阅读Michael Hartl的轨道教程,并注意到他正在使用一种称为多键索引的东西.我知道这意味着Active Record同时使用两个键,但我不确定使用多个键索引的优点和缺点是什么.

如果有人能给出答案我会非常感激.

Bil*_*win 15

任何索引都可以通过允许查询缩小要检查的行集来提供益处.

当您的查询包含多个列的条件时,多列索引可以提供帮助.

例如:

SELECT * FROM Mytable WHERE user_id = 123 AND created_at > '2013-02-01'
Run Code Online (Sandbox Code Playgroud)

多列索引缩小到与user_id 123相关联的行的子集,然后在该子集内,它进一步将选择范围缩小到具有最近created_at值的那些.

如果索引中没有第二列,则RDBMS必须将user_id 123的所有行加载到内存中,然后才能确定它们是否通过了条件.

有关详细信息,请参阅我的演示文稿 如何设计索引,真的.