数据库索引底层的数据结构(B+树)

目录

 一、索引的概念

二、索引背后的数据结构的探讨

三、B+树的介绍

四、B+树的优势:             


 一、索引的概念

        索引是一种特殊的文件,包含着对数据表里所有记录的引用指针,可以对表中的一列或多列创建索引,并指定索引的类型。

        数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。索引所起的作用类似书籍目录,可用于快速定位、检索数据。 索引对于提高数据库的性能有很大的帮助

         数据库中的索引可以用来加快对表的查询速度,但数据库表中数据经常需要进行修改和删除的操作时,则不考虑进行创建索引。同时创建索引会占用磁盘额外的空间,并拖慢了数据库表的增删改操作效率。

二、索引背后的数据结构的探讨

       索引的目的是用来加快对表数据查询的效率,在我们所学到的数据结构中可能会想到二叉搜索树和哈希表,但是二叉搜索树和哈希表并不态适用于索引。

 原因如下:

(1)二叉搜索树:当数据库表中的数据元素较多时,此时二叉搜索树的节点会比较多,树的高度也会随之变多,因此二叉搜索树每一次的查找与对比都会增加对磁盘的读写次数,不适用于索引

(2)哈希表:虽然哈希表的时间复杂度为O(1),但是哈希表在查询数据的时候,只能进行值的比较,不能进行大于,小于或者数据范围的比较,因此哈希表对于索引的数据查询是无能为力的

       

在了解了二叉搜索树和哈希表不适用于索引的原因后,我们引出了B+树来为索引量身定制

三、B+树的介绍

        B+树又叫做N叉搜索树,言外之意是每个节点可以存储N个key值。同时每个节点的key值也会在子节点中存在。

       以下为B+树的图形展示:

数据库索引底层的数据结构(B+树)_第1张图片

 

特点:(1)B+树的每个节点可以有N个key值,并且这N个key值划分为N个范围

                    注意:B树的每个节点可以有N个key值,并且这N个key值划分为N+1个范围)

           (2)每个节点的key都会在子节点中存在(同时该key是子节点的最大值)

              (3)  B+树的叶子节点是首尾相连,类似于一个链表结构

           (4)B+树的所有数据都存在叶子结点中(即所有非叶子结点的数据在叶子节点中存储)

                   那些非叶子节点只存储相应的key值而已

 

四、B+树的优势:             

       1、 由于B+树的叶子节点中存储的key值即数据库表中的每一行的数据,当查询数据库表的数据时可以直接查询叶子结点的数据即可,大大加快了数据查询的效率。

       2、B+树的每个节点可以存储N个key值,意味着在同样数量的key值情况下,B+树的高度比二叉搜索树的高度会相对更低,在查询数据的时候相对应的减少了对磁盘的读写次数

       3、B+树在查询数据时,都会到叶子节点中去查询,每次查询数据时对磁盘的读写次数都是相同的,因此B+树在查询数据时会更加的稳定。

你可能感兴趣的:(MySQL,数据库)