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

https://blog.csdn.net/qq_34233510/article/details/90215975

https://blog.csdn.net/itguangit/article/details/82145322

https://blog.csdn.net/u012006689/article/details/73195837

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)有时需在多个字段上建索引,可以大大提高查询效率