为什么我们需要DBMS中的二级索引?

时间:2016-08-11 17:58:02

标签: sql database mysqli rdbms

我认为主要索引对每条记录都是唯一的,因此使用主索引检索记录会更快。当我们使用二级索引时会发生什么。

我能想到的,

ID     Name     School
1      John      XYZ
2      Roger     XYZ
3      Ray       ABC
4      Matt      KJL
5      Roger     ABC

如果我们在Name上有二级索引,那么它将帮助我检索与名称相关的记录而不是id,因此如果我查询Roger的记录并且我将能够得到结果,它不会将我限制为一条记录罗杰斯。因此,如果基于二级索引广泛查询表,则应使用它。

我是对的吗?

1 个答案:

答案 0 :(得分:1)

除了加快特定查询的速度外,二级索引最常见的情况可能是加快对UNIQUE约束的检查。考虑例如一张桌子

CREATE TABLE Person (
    id               int primary key,
    fname            text not null,
    lname            text not null,
    date_of_birth    date not null,
    ...
    UNIQUE (fname, lname, date_of_birth)
)

在这里,我们要强制执行UNIQUE约束,以确保同一个人在不同ID下不会多次出现在表中。但是同时,我们不想将(fname,lname,date_of_birth)用作主键,因为一个人的名字可能会发生变化,并且因为使用3个属性作为引用可能很麻烦。

现在,当在表中插入新记录时,DBMS需要检查它是否已经包含另一个具有相同记录(fname,lname,date_of_birth)的元组,并且这些属性上的辅助索引可以帮助加快检查速度。

请注意,UNIQUE约束会自动生成它们的索引,因此无需显式创建它们。

需要二级索引(必须明确创建二级索引)的另一种常见情况是外键约束,其目标对象不是组成目标表主键的属性。