高薪Offer收割机之索引及索引的数据结构

什么是索引,索引的数据结构

索引是帮助数据库高效获取数据的数据结构,索引也是以文件的方式存在磁盘中,索引以某种方式指向数据,所以可以在索引中实现高效的数据查询。

我们以二叉树为例来讲解一下索引的原理。下图左边为原始表数据,右边为在年龄字段上建立的二叉树结构的索引。

假设要查询年龄为19的人员的数据,如果没有索引需要全表扫描,从第一条数据开始依次比对年龄为19的数据。需要比对6

使用索引先在二叉树上查找,查到19需要比对3次,然后定位到左表的原始数据,速度得到明显提升,数据量越大提升效果越明显。

Mysql默认的的索引底层结构是B+在讲解B+树之前我们先来看看其他数据结构用作索引有什么缺陷

先来看看二叉树:

二叉树的特点:一个节点最多有两个子节点,左子节点的元素小于右子节点因此可以快速定位到某一个元素因为受限于最多只能有两个子节点的条件,当节点较多时层级也会较多,查找效率变低,在顺序插入的情况下可能会形成一个链表导致查询效率极大的下降:

再来看看B树:

B每个节点可以包含多个子节点,并且允许一个节点包含多个Key因此在数据量的场景下B树的层级可以得到很好的控制,查询效率明显提高。

下图是一颗最大度数(一个节点中最多可以包含的子节点的数量)为5(5)b-tree这个B树每个节点最多存储4key

B+树是在B树基础上的优化,MySql的存储引擎InnoDB使用的就是B+树实现索引结构

B树中每个节点除了存储key以外还存储了对应的数据,而B+树除了叶子节点,其他节点都只存储key不存储数据,假如要查找key6的数据则在查找非叶子节点时只需要读取key的值,这样就保证了在磁盘读写时代价更低。因为不需要每次都读取数据,查询效率也更高

B+树中的叶子节点之间都有一个双向指针相连,所以相对于B树区间查询效率更高。

3

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容