一、什么是索引
字典中的目录,就是生活中的索引
**索引:**定义在存储表基Table础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一些列存储在磁盘上的索引项index etries组成,每一个索引项又由两部分构成:
- 索引字段: 索引列串接而成,通常存储了索引字段的每一个值
- 行指针:包含索引字段值的数据在磁盘上存储的位置
存储索引项的文件为 索引文件,存储表的为 主文件
索引文件组织方式有两种:
- 排序索引文件:按照索引字段值的某一种顺序
- 散列索引文件:使用hash一样的散列函数分配散列桶的方式
索引好坏的评判标准:
- 访问时间
- 插入删除时间
- 空间负载
- 支持存取的有效性:支持的是属性的限定值(是否符合单一值),属性限定范围的值
1.1 索引的创建
--在student表中创建基于Sname的索引
create index idxSname on student(sname);
--在student表中创建基于Sname、Sclass的索引
create index indSnamecl on student(sname,sclass);
--删除撤销索引
drop index indexname;
二、索引的分类
2.1 稠密索引稀疏索引
稠密索引:主文件中每一个记录,都有一个索引项和他对应
稀疏索引(非稠密索引):主文件中部分字段,和他对应。为了后续查找,要求主文件必须按照索引字段排序存储。
主索引:索引 ----> 存储块(包含多条数据)
2.1.1 稠密索引的定位方式
索引没有重复值
索引有重复值
引入桶处理重复值
2.2 主索引 辅助索引
主索引
通常是对每一个存储块 构建 一个索引 又称为 锚记录 快锚
辅助索引
定义在主文件的任一或多个非排序字段上的辅助存储结构
中间的存储结构可以用链表
主索引 辅助索引对比
一个主文件仅可以有一个主索引,但可以有多个辅助索引
主索引通常在主码上
可以利用主索引重新组织主数据
稀疏 稠密
2.3 其他类型索引
2.3.1 聚簇索引
索引中临近的,主文件中也邻近
2.3.2 倒排索引
多级索引:B、B+
多属性索引
散列索引
网格索引
三、B+树索引
多级索引: 索引还可以再建立索引
3.1 B+树的基本概念
B+树
B树数据结构
3.2 B+树建立不同的索引
3.2.1 B+树建立键属性稠密索引
索引为主键,索引是稠密的,排序不做要求。指针指向的是记录
3.2.2 B+树建立键属性稀疏索引(主索引)
索引为主键,稀疏,主文件必须排序
指针指向的是数据块
3.2.3 用B+树建立非键属性稠密索引
索引为非键属性,稠密的
索引无重复,指针指向的是记录,分 主记录
3.2.4 用B+树建立非键属性稠密索引
相比上面,索引可以重复
3.3 B树 B+树
3.4 B+ 树的操作
B+树数据结构
四、散列索引
用一个散列函数(Hash)可以打散,分裂数据到 桶 当中
多的时候可以有溢出桶
溢出桶是动态调整的
所以 Hash不均分的话,就可能退化成链表
静态散列索引:桶的数目M固定,太大浪费,太小溢出桶多
解决:如下
4.2 可扩展散列索引
桶引入间接层:一个