数据库的索引原理聚簇索引与非聚簇索引的区别索引结构的各自优势索引的设计原则(文章持续更新中)

Posted Acmen-zym

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库的索引原理聚簇索引与非聚簇索引的区别索引结构的各自优势索引的设计原则(文章持续更新中)相关的知识,希望对你有一定的参考价值。

数据库的索引原理

索引作用
索引是用来快速查找特定值的记录。如果没有索引、一般来说执行查询时会遍历整个表。索引就是把无须的数据变成有序的,然后提高查询效率。

索引原理
1、把创建了索引的列进行排序
2、对排序结构生成倒排表
3、在倒排内容中拼接对应的数据地址
4、查询时先拿到倒排表的内容,再取出数据地址,然后在拿到具体的数据

聚簇索引与非聚簇索引

聚簇索引
聚簇索引是索引与数据存储在一块,并且是按顺序存储的。查询到聚簇索引就可以直接获取数据,不需要进行二次查询。使用范围查询速度效率高,其数据是可以按照大小排序的,因为是有序的也更合适这排序场合使用。相对来说维护成本高,特别是插入新数据或者更新导致要分页时。还有使用随机ID做主键时,导致数据稀疏导致效率很低。辅助索引存的是主键值,如果参数过大会导致占用磁盘空间过多

非聚簇索引
非聚簇索引中,索引与数据是分离的,索引中存储的是内存地址,也就是每次索引后需要进行二次查询。以书本的目录为例子,我们看到目录中想要的内容在这多少页以后,还需要自己再次翻页过去。但是维护成本低,因为不会存储数据

Hash索引结构与B+Tree索引结构

Hash索引
当查询都为单个查询,例如说 ID=3这种,hash索引的效率是非常高的。但是这范围查询的情况下,因为hash索引是无序的,效率就低了。如果出现hash冲突的,还会有一个维护的链表进行检索。例如下图中,有两个key的hash值都是152,此时将会有一个自己维护的链表进行遍历,如果出现大量冲突时效率也会降低很多
在这里插入图片描述

B+Tree
B+Tree是一个平衡的多叉树,也就是一个父节点可以对应多个子节点。每个节点的高度不会超过1,而且同级别节点有指针相连,也就是从根节点到子叶子节点效率是基本差不多的,幅度不会太大。做顺序扫描时,也就是范围值查询时,可以进行双向移动指针,效率非常高
在这里插入图片描述

以上是关于数据库的索引原理聚簇索引与非聚簇索引的区别索引结构的各自优势索引的设计原则(文章持续更新中)的主要内容,如果未能解决你的问题,请参考以下文章

聚簇索引与非聚簇索引(也叫二级索引)

聚簇索引与非聚簇索引的区别

数据库中聚簇索引与非聚簇索引的区别 (整理)

MySql聚簇索引与非聚簇索引的区别

聚簇索引与非聚簇索引

索引结构(BTreeB+Tree和Hash等)和分类(聚簇索引与非聚簇索引等)