> 文章列表 > 数据库系统-索引

数据库系统-索引

数据库系统-索引

一、什么是索引

字典中的目录,就是生活中的索引

索引:定义在存储表基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 可扩展散列索引

桶引入间接层:一个