我认为主要索引对每条记录都是唯一的,因此使用主索引检索记录会更快。当我们使用二级索引时会发生什么。
我能想到的,
ID Name School 1 John XYZ 2 Roger XYZ 3 Ray ABC 4 Matt KJL 5 Roger ABC
如果我们在Name上有二级索引,那么它将帮助我检索与名称相关的记录而不是id,因此如果我查询Roger的记录并且我将能够得到结果,它不会将我限制为一条记录罗杰斯。因此,如果基于二级索引广泛查询表,则应使用它。
我是对的吗?
答案 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约束会自动生成它们的索引,因此无需显式创建它们。
需要二级索引(必须明确创建二级索引)的另一种常见情况是外键约束,其目标对象不是组成目标表主键的属性。