【索引简介】

本文深入探讨了数据库索引的本质,包括B-Tree和B+Tree的数据结构特点,以及它们在存储和查找效率上的优势。B+Tree的非叶子节点不存储data,叶子节点通过双向指针链接,提高访问速度。同时,文章提到了Hash索引的快速定位特性,但其不支持范围查询的问题。还介绍了聚集索引与非聚集索引、联合索引与单值索引、覆盖索引与非覆盖索引的区别。通过对索引的全面理解,能有效提升数据库查询性能。

索引本质是一种帮助数据库排好序的数据结构,类似于目录;(表中的行数据,在磁盘的存储位置,不一定放在一起)

索引的数据结构

二叉树、红黑树、Hash表、B-Tree

B-Tree:

                叶子节点具有相同的深度;

                叶子节点指针为空;

                所有索引元素不重复;

                节点中数据索引从左到右依次递增;

B+Tree:

               非叶子节点不存储data,只存储索引(冗余,相当于取了部分叶子节点的元素),可以存储更多的数据;

                叶子节点包含所有索引字段

                叶子节点用双向指针链接,提高访问速度

                推算3层的B+树可以存放上的数据量= 

                首层:仅存放索引,叶节点 16kb,bigint-8b,文件地址-6b,一个叶子节点可以存放索引数量 = 16kb/(8+6)b=1170;

                第二层:仅存放索引,叶节点 16kb,bigint-8b,文件地址-6b,一个叶子节点可以存放索引数量 = 16kb/(8+6)b=1170;

                第三层:假设存放所有字段,叶节点16kb,按照1kb/行来算,可以存放16(16/1)行;

                1170*1170*16 = 21902400

                这意味,仅需要进行三次的磁盘IO就可以找到具体数据,相比于没有索引的情况下的2000W次IO,大大减少时间消耗。

                MYSQL高版本,将根节点常驻内存

Hash:

常用的hash算法:MD5、CRC16、CRC13等。

对索引key进行一次hash计算就可以定位出数据存储的位置;

 很多时候Hash索引要比B+树索引要快,因为树结构可能根据树高度需要多次IO,而hash可能一次就找到了

仅支持 = 、in,不支持范围查询;--- 致命的弊端

hash冲突问题:hash值相同时,排在链表后面

索引分类

  • 聚集索引与非聚集索引

聚集索引的叶节点就是数据节点;而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。

  • 联合索引与单值索引

联合索引:由多个字段组成的索引

联合索引的最左前缀原理:按照建立索引的字段先后顺序排序。

例如索引 name,age,先按照name字段排序,排完序之后再按照age排序;如果直接使用age字段,可能查到的数据是乱序的,那么必须全表扫描。

  • 覆盖索引与非覆盖索引

覆盖索引定义:mysql执行计划explain结果里的key有使用索引,如果select后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra里一般都有using index;覆盖索引一般针对的是辅助索引,整个查询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值