chapter13_数据库的存储结构_4_索引文件
-
索引:将一个或多个字段,按照某种有规律的方式组织起来,以便进行快速查找
-
索引文件包括 索引键 + 对应的记录指针
索引键 位置 001 0x983f 002 0x753d ... ...
-
索引的弊端:
(1) 索引文件也要占据存储空间
(2) 插入、删除、修改记录时,要同时更新索引文件
-
当索引文件很大时,可以对索引文件再建立索引,形成多级索引
-
(1) 稀疏索引
1° 每个数据块建立一个索引(即索引总数少于记录总数)
2° 查找时,先找到索引对应的数据块,然后在数据块中顺序扫描
3° 优点:索引文件空间小
4° 缺点:
查询速度较慢;
数据记录必须按照索引键值顺序存储(这样才能有对应的块),导致插入、删除、修改操作复杂
5° 由于稀疏索引的特点,稀疏索引只能建立在顺序文件上(否则无法指定对应的块),而且只能建一个索引(必须按照一种索引键值的顺序存储)
(2) 稠密索引
1° 每个记录都对应一个索引
2° 记录可以任意存放,但是索引文件会较大
-
(1) 聚集索引
1° 文件中的所有元组按照索引键指定的顺序排序,使得具有相同索引键值的记录在物理上聚集在一起
2° 根据聚集索引的特性,聚集索引键是顺序文件的排序键
3° 当聚集索引键不是关系的主键时,可能会出现一个索引键对应多条记录的情况,此时聚集索引键指向的是物理上出现的第一条记录
4° 根据3°,查找时首先根据聚集索引找到第一条记录,然后顺着向下扫描
5° 对于MYSQL的InnoDB引擎,它会按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集
(2) 辅助索引
1° 属于稠密索引,并且可以有多个
2° 索引表的第一个字段保存索引键值,第二个字段保存对应的记录。当索引键不是主键时,索引表中会出现第一个字段重复的情况
索引键 磁盘块指针 张三 0x9857 张三 0x585f 张三 0x3d9e
3° 为了解决字段重复的问题,提高存储效率,可以中间添加一个记录指针桶:索引表的索引键一项不再有重复,它们保存记录指针桶对应的位置,记录指针桶是一个链表,指向对应的记录的位置
-
_B+树索引
(1) 稀疏索引、稠密索引、聚集索引、辅助索引都输入 线性索引, B+树索引属于树形索引
-
唯一索引 UNIQUE INDEX
(1) 与普通索引类似,不同的是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
(2) 创建方式
1° 创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns)
2° 修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
3° 创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));