理解数据库中树的高度越高涉及到的磁盘IO越多

概述:

在数据库中, 经常会涉及到一个问题, 就是B树和B+树,涉及到这两个数据结构, 往往涉及到一个问题, 就是B树和B+树的树的高度要比平衡二叉树的高度低, 这会降低很多的磁盘IO操作.


都说可以降低磁盘IO, 那么怎么理解呢?    --  以下是自己的理解, 如有错误,欢迎指正.

理解: 

B树和B+树是用来维护索引结构的, 当你查询一条数据的时候. 这些结构都是存储在磁盘当中.(假设没有提前导入到缓存中)


当我们涉及到一颗树的时候, 因为其存储在磁盘, 这个记录应该会记录在相应的表结构中, 根据这个记录,可以找到树的头结点.   

这样,就可以将头结点读取到内存, 进行检索. 这其实就是一次磁盘IO.  当读取到头结点之后,因为其是链表的结构, 就可以根据头结点直到下一层节点存储在磁盘中的位置.(一棵树的节点在磁盘中不一定是连续存储的).  当你读取下一层节点的数据的时候, 就会涉及到又一次磁盘IO了.

如果以上面的方式读, 如果树的高度越高, 层级越多, 那么就会涉及到更多的磁盘IO. 也就会低效了.

那么,这里就会有一个问题, 为什么不一次性将树的节点都载入内存呢?  

其实就是说, 树的节点在磁盘中存储并不是连续的, 所以读取的时候你其实并不知道别的节点存储在哪个位置, 你只记录了当前的根节点在磁盘中存储的位置, 其余节点都是根据根节点逐层直到的.

比如:  第二层的节点的位置可以根据根节点得到, 同理第三层的节点可以根据第二层的节点得到.

这样其实就很明朗了,  如果使用二叉搜索树, 树的高度很高, 层级就会很大, 需要读取上一层来获取下一层存储的位置, 这样就会有很多的磁盘IO.

而B树或者B+树是多叉自平衡树,一般树的高度只有三层, 这样涉及到的磁盘IO的数量就是3,明显磁盘IO的次数降低了(因为,一个节点可以存放更多节点的位置了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值