开发者社区> 问答> 正文

SQL:为什么B+树而不是B树?

已解决

为什么B+树而不是B树

展开
收起
可乐大侠 2021-10-01 15:56:43 882 0
1 条回答
写回答
取消 提交回答
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。
    采纳回答

    您好:

    B树只适合随机检索,而B+树同时支持随机检索和顺序检索;
    B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低;一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上;这样的话,索引查找过程中就要产生磁盘I/O消耗;B+树的内部结点并没有指向关键字具体信息的指针,只是作为索引使用,其内部结点比B树小,盘块能容纳的结点中关键字数量更多,一次性读入内存中可以查找的关键字也就越多,相对的,IO读写次数也就降低了;而IO读写次数是影响索引检索效率的最大因素;
    B+树的查询效率更加稳定;B树搜索有可能会在非叶子结点结束,越靠近根节点的记录查找时间越短,只要找到关键字即可确定记录的存在,其性能等价于在关键字全集内做一次二分查找;而在B+树中,顺序检索比较明显,随机检索时,任何关键字的查找都必须走一条从根节点到叶节点的路,所有关键字的查找路径长度相同,导致每一个关键字的查询效率相当;
    B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题;B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历;而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作;
    增删文件(节点)时,效率更高;因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率。
    
    
    2021-10-01 16:04:40
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载