数据库的索引原理、聚簇索引与非聚簇索引的区别、索引结构的各自优势、索引的设计原则

mysql 专栏收录该内容
4 篇文章 0 订阅

数据库的索引原理

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

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

聚簇索引与非聚簇索引

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

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

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

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

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

索引的设计原则

1、索引的列是出现这where子句中的列,或是链接子句中的列
2、数据量小的表没有必要建立索引,因为索引本身也会有一个索引表需要维护
3、尽量使用短索引,也就是字符数量较少的,如果需要使用长字符串做索引,那就使用前缀索引,这样减少索引空间使用
4、不要过度索引,索引也是需要维护的,索引过多维护成本也会增加
5、这定义外键的数据列上建立索引
6、更新频繁的字段不适合做索引
7、那些很少查询的列,重复值较多的列没有必要建索引
8、列辨识度不是很高,不能有效区分数据的列没有必要建立索引,比如说性别

  • 9
    点赞
  • 10
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值