索引
索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。索引技术是组织大型数据库以及磁盘文件的一种重要技术。
索引的分类
索引按照结构可以分为线性索引、树形索引和多级索引。所谓的线性索引就是将索引项集合组织为线性结构,也称为索引表。主要有以下三种线性索引:稠密索引、分块索引、倒排索引。
稠密索引
稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项
对于稠密索引来讲,索引项一定是按照关键码有序的排列,优点是可以用到不同有序查找算法,大大提高效率,但是如果数据集非常大,索引也得同样的数据集长度规模,对于内存有限的计算机来说,反复访问磁盘,查找性能反而降低。
分块索引
分块有序,是吧数据集分为若干块,并且这些块需要满足两个条件:块内王旭,块间有序
对于分块有序的数据集,将每块对应一个索引项,这种索引方法叫分块索引。索引结构分为三个数据项:
- 最大关键码,它存储每一块中的最大关键码,这样的好处使得在它之后的下一块中的最小关键字也能比这一块关键字要大;
- 存储类块中的记录个数,以便循环使用;
- 用于指向块首数据的指针,便于开始对这一块中的记录进行遍历。
在分块索引表中查找,分两步进行:
- 查找关键字所在块,由于分块索引是块间有序的,所以可以采用折半查找。
- 根据块首地址找到相应块,并在块中顺序查找关键码,因为块中可以是无序的,所以只能顺序查找。
平均查找长度分析
设n个记录的数据集被平均分为m块,每块中有t条记录,n=m*t。
Lb为查找索引表的平均查找长度 Lb=(m+1)/2
Lw为块中查找记录的平均查找长度 Lw=(t+1)/2
分块索引的平均查找长度ASLw为:
ASLw=Lb+Lw=[(m+1)/2] + [(t+1)/2 ]=1/2(m+t)+1 = 1/2( ( n/t ) + t ) + 1
最佳情况:分的块与块中的记录t相同 即 n=m*t=t²
ASLw=√n+1
倒排索引
被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。
样例(两篇极短英文文章,编号为1、2)
- Books and friends should be few but good.
- A good book is a good friend.
在这里这张单词表就是索引表,索引项的通用结构是:
- 次关键码:上面的英文单词
- 记录号表:上面的文章编号
记录号表存储具有相同次关键字的所有记录的记录号(可以是指向记录的指针或者是该记录的主关键字)
优点:查找记录非常快
缺点:记录好不定长,维护困难