数据库索引原理(聚集索引、非聚集索引(辅助索引)、联合索引、覆盖索引)

聚集索引、非聚集索引(辅助索引)、联合索引、覆盖索引

1.聚集索引

  • 可以理解为主键
  • 一个表只能有一个聚集索引
  • 主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置
    在这里插入图片描述
  • 加了主键(聚集索引)后查询复杂度从 O(n) 降为 O(log n)

在这里插入图片描述

2.非聚集索引

  • 包括单字段索引和多字段索引(联合索引
  • 即常规用到的索引
  • 给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联
    在这里插入图片描述
  • 每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间
2.1 聚集索引与非聚集索引的区别
  • 聚集索引可以查到需要查找的数据
  • 通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据在这里插入图片描述
  • 不管以任何方式查询表, 最终都会利用主键通过聚集索引来定位到数据, 聚集索引(主键)是通往真实数据所在的唯一路径

3.例外情况(覆盖索引)

  • 即 复合索引 或 多字段索引
  • 创建覆盖索引 create index index_birthday_and_user_name on user_info(birthday, user_name)
  • 然后查询 select user_name from user_info where birthday = '1991-11-1'的查询过程如下所示
    在这里插入图片描述

4.总结

  • 1)索引的数据结构:非二叉平衡树(B树、B+树)
  • 2)表要加主键(聚集索引)
  • 3)加索引后会使查询变快
    • 先通过属性索引找到需要的主键值,再通过聚集索引找到需要的数据,不需要扫描所有数据
  • 4)加索引后会使写入、修改、删除变慢
    • 平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确
  • 5)有时需在多个字段上建索引,可以大大提高查询效率
    • 见上图

参考:https://www.cnblogs.com/aspwebchh/p/6652855.html

Over!

你可能感兴趣的:(database)