• 索引:将一个或多个字段,按照某种有规律的方式组织起来,以便进行快速查找
  • 索引文件包括 索引键 + 对应的记录指针
索引键     位置
    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 [indexName] ON (tableColumns(length))
    3° 创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));