chapter13_数据库的存储结构_4_索引文件

  • 索引:将一个或多个字段,按照某种有规律的方式组织起来,以便进行快速查找

  • 索引文件包括 索引键 + 对应的记录指针

      索引键     位置
        001    0x983f
        002    0x753d
        ...      ...
    
  • 索引的__弊端__:

    (1) 索引文件也要占据存储空间

    (2) 插入、删除、修改记录时,要同时更新索引文件

  • 当索引文件很大时,可以对索引文件再建立索引,形成__多级索引__

  • (1) 稀疏索引

    1° 每个数据块(一群记录)建立一个索引(即索引总数少于记录总数)

    2° 查找时,先找到索引__对应的数据块__,然后在数据块中__顺序扫描__

    3° 优点:索引文件空间小

    4° 缺点:

    查询速度较慢;

    数据记录必须按照索引键值顺序存储(这样才能有对应的块),导致插入、删除、修改操作复杂

    5° 由于稀疏索引的特点,稀疏索引只能建立在顺序文件上(否则无法指定对应的块)而且只能建一个索引(必须按照一种索引键值的顺序存储)

    (2) 稠密索引

    1° 每个记录都对应一个索引

    2° 记录可以任意存放,但是索引文件会较大

  • (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 INDEX [indexName] ON (tableColumns(length))

    3° 创建表的时候直接指定:CREATE TABLE tableName ( […], UNIQUE [indexName] (tableColumns(length));

猜你喜欢

转载自blog.csdn.net/captxb/article/details/88063591