线性索引查找
索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。索引技术是组织大型数据库以及磁盘文件的一种重要技术。索引按照结构可以分为线性索引、树形索引和多级索引。这里只探讨线性索引,即将索引项集合组织为线性结构,也称为索引表。其中又分为:稠密索引、分块索引和倒排索引。
稠密索引
稠密索引是指在线性索引中,将数据集中的每一个记录对应一个索引项。对于稠密索引这个索引表来说,索引项一定是按照关键码有序的排列。而如此便可以对索引表采取折半查找等高效查找算法,但是如果数据集非常打,那就意味着索引表也得是同样的数据集长度规模,对于内存有限的计算机来说,可能就需要反复进行磁盘IO,查找性能反而下降了。
分块索引
分块索引是把数据集的记录分成了若干块,并且这些块需要满足两个条件:
- 块内无序
- 块间有序,例如要求第二块所有记录的关键字均要大于第一块中所有记录的关键字。
倒排索引
倒排索引的通用结构是:
- 次关键码,例如下表中的”英文单词“;
- 记录号表,例如下表中的”文章编号“
其中记录号表存储具有相同关键字的所有记录的记录号(可以是指向记录的指针或者是改=该记录的主关键字)。这样的索引方法就是倒排索引(inverted index)。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。(由于不是由记录来确定属性值,而是由属性值来确定记录的位置,所以称为倒排索引)
假设有两句句子,我们之后要对其进行根据关键字的查找。
- Books and friends should be few but good.
- A good book is a good friend.
我们忽略掉里面的复数和大小写区别,建立倒排索引表如:
单词 | 文章编号 |
---|---|
a | 2 |
and | 1 |
be | 1 |
book | 1,2 |
but | 1 |
few | 1 |
friend | 1,2 |
good | 1,2 |
is | 2 |
should | 1 |