数据库索引:聚集索引、非聚集索引(辅助索引)、联合索引、覆盖索引
https://blog.****.net/qq_34233510/article/details/90215975
https://blog.****.net/itguangit/article/details/82145322
https://blog.****.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)有时需在多个字段上建索引,可以大大提高查询效率