高级数据库技术 课程笔记三——索引的概念与分类

在数据库中建立索引的目的:提高从数据库中检索数据的速度,提高查询效率

索引在数据库中也是以关系的形式构造和保存的,我们称为索引文件

索引记录:由一个搜索码值和指向具有该搜索码值的一个或多个记录的指针构成。

宏观的索引种类
1.根据索引文件的存储顺序是否与数据文件的存储顺序相同,将索引分成聚集索引非聚集索引
2.根据是否为每一个搜索码值都建立,将索引分成稠密索引稀疏索引
3.根据索引元是有序的还是无序的,将索引分成有序索引散列索引

顺序索引:数据文件按照某一个搜索码值的顺序存储,索引文件也按照该搜索码值的顺序进行存储(可以是稀疏的,也可以是稠密的)
稀疏索引的特点:查找相对比较慢,但占用空间小,易于维护。
稠密索引的特点:查找快,但占用空间大,且不容易维护。

当数据规模比较大的时候,我们会把稀疏索引和稠密索引结合起来建立多级索引结构进行使用。
高级数据库技术 课程笔记三——索引的概念与分类_第1张图片

B+树索引
B+树索引从总体结构来讲是一种多级索引,采用平衡树结构。树的所有结点结构都相同,包含n-1搜索码值n指针,每个结点中搜索码值按从小到大的次序存放。

B+树中的节点包括三种:根节点叶节点非叶节点

根节点的结构:根节点的指针数可以少于[n/2],但除非整棵树只有一个节点,否则至少包含两个指针。根节点的每一个指针都指向叶节点或者非叶节点。

叶节点的结构:每一个叶节点必须包含的键值数达到半满以上,每一个叶节点都通过最后一个指针和下一个叶节点连接起来。指针Pi指向搜索码值Ki的一个文件记录或者指针桶。
高级数据库技术 课程笔记三——索引的概念与分类_第2张图片
非叶节点的结构:非叶节点的键码总数也要达到半满以上,每一个指针都指向叶节点或者是下一个非叶节点。

B+树索引既可以作为主索引,也可以作为辅助索引(可以建立在码属性上,也可以建立在非码属性上),作为主索引时,它可以是稀疏索引,也可以是稠密索引

B+树查询支持范围查询(搜索码值小于B大于A),也支持随机查询(搜索码值等于A)。B+树的查询是从根节点到叶节点的遍历过程,查询的代价是树的高度,公式为:在这里插入图片描述
其中k为搜索码取值个数,n-1是查询树的高度。

B+树插入记录时会产生节点的分裂删除记录时会产生节点的合并

B+树记录插入的实例:

1.插入键值40。
高级数据库技术 课程笔记三——索引的概念与分类_第3张图片
2.由于叶子节点键值满了,分裂成两个叶子节点,此时父节点指针不够用,且键值已满,需要分裂。
高级数据库技术 课程笔记三——索引的概念与分类_第4张图片
3.父节点分裂成两个,向上递归检查,根节点指针也不够用,但是键值未满,需要补充一个键值。
高级数据库技术 课程笔记三——索引的概念与分类_第5张图片
4.根节点插入的值应该为引出的子树的最小值,即40。
高级数据库技术 课程笔记三——索引的概念与分类_第6张图片

B+树删除记录的实例

1.删除键值为7的记录
高级数据库技术 课程笔记三——索引的概念与分类_第7张图片
2.因为叶子节点的键值没有达到半满,需要从兄弟节点借一个键值为5的记录,
高级数据库技术 课程笔记三——索引的概念与分类_第8张图片

3.再删除一个键值为11的记录,叶子节点的键值也没有达到半满,兄弟节点也无法再借一个键,所以需要合并叶子节点。
高级数据库技术 课程笔记三——索引的概念与分类_第9张图片
4.此时父节点不满足B+树的要求,需要把另一颗子树上的最小值13调过来
高级数据库技术 课程笔记三——索引的概念与分类_第10张图片
5.再对其他部分进行一下调整
高级数据库技术 课程笔记三——索引的概念与分类_第11张图片
6.维护一下根节点和另外一颗子树。
高级数据库技术 课程笔记三——索引的概念与分类_第12张图片

B+树的效率:
高级数据库技术 课程笔记三——索引的概念与分类_第13张图片

散列索引

高级数据库技术 课程笔记三——索引的概念与分类_第14张图片

动态散列索引的实例

高级数据库技术 课程笔记三——索引的概念与分类_第15张图片
因为0开头的桶中只存在一条记录,所以00和01桶可以共享一个磁盘块,并且在后面用一个1来表示桶中的记录只用前1位表达。而10开头和11开头的桶在后面用2来表示桶中的记录用前2位表达

动态散列索引特点:
高级数据库技术 课程笔记三——索引的概念与分类_第16张图片

你可能感兴趣的:(高级数据库技术 课程笔记三——索引的概念与分类)