搜索
首页数据库mysql教程Mysql-索引-BTree类型【精简】

网络上看了很多关于B-TREE的总结,b树,B-树,B+树,B*树(艾玛怎么还4个呢?都快蒙圈了呢),

有的真的很精彩令人佩服,但是都是篇幅太长啊,一大长段的文字就让人望而生畏啊。干脆做一个简化版的总结,通俗移动点介绍下,说说他们的区别。
一.B树

Binary Tree,就是一个二叉树。(什么K呀h,n啥的公式这里不说了,有兴趣的可以自己搜搜..)
(1)所有非叶子结点至多拥有两个儿子(Left和Right);
(2)所有结点存储一个关键字
(3)非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;(简单说,左边比自己小,右边比自己大

B树


二.B-树

平衡二叉树(Balance Binary Tree) --AVL树【这里的B,其实是balance的意思哦~】
(1)根节点的左子树和右子树的深度最多相差1.(确保了不会出现上图右边的极端现象)
(2)根节点的左子树和右子树叶都是一棵平衡二叉树
(3)所有结点都有存储关键字
无论插入的序列是怎么样,我们都能通过调整构建一棵平衡二叉树,保证二叉树中的每个节点的平衡因子都不会大于1,保证了树的深度达到最浅,从而比较的次数就会更少,时间复杂度就会降低

图 B-树


三.B+树

B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中)
(1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;(只有根节点存储关键字最后树的末梢才有值)
(2)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层。(非根节点,存储的其实是指向根节点的索引
(3) 因为前两点,所以不可能在非叶子结点存数据。(区别B-的第三条)
(4)根节点横向也有链指针(方便快速顺藤摸瓜嘛,没这个指针,就算下一个取的值是挨着的邻居,也得跑个圈才能拿到)


注意,我们一般用到的索引结果,或者通常指的B-TREE结构,大部分就是在说B+结构啦~~

图 B+树


四.B*树
B+树的变体,

(1)B+树的非根和非叶子结点再增加指向兄弟的指针;[对比上边B+的第4条,在非根节点也添加横向链表]
图 B * 树


五.总结:

B树:二叉树,
每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;(但B树在经过多次插入与删除后,有可能导致不同的结构),为此,加上平衡算法后生成平衡二叉树,又称B-树


B-树:在B 树的基础上,加上平衡算法,多路搜索树,
1.每个结点存储M/2到M个关键字,
2.非叶子结点存储指向关键字范围的子结点;
3.所有关键字在整颗树中出现,且只出现一次,

4.叶子节点,非叶子结点都可以命中(是否存了数据);


B+树:在B-树基础上,

1.为叶子结点增加链表指针

2.所有关键字都在叶子结点中出现,

3.非叶子结点作为叶子结点的索引;

4.B+树总是到叶子结点才命中;


B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率从1/2提高到2/3;


 疑问:B*效率高了,但但觉为什么b*树用的比较少呢?????或者哪里有用吗??可能还是见的太少了。。有了解的童鞋可以互相学习下,敬请赐教,在这里先谢谢啦~

解答:最近得知,有个叫Reiser4的文件系统好像使用到了这种结构。其作者Hans Reiser,因为他老婆让他带了绿帽子,就把老婆杀了,蹲大牢了,直接影响到了项目进度。。。


介绍:

Linux文件系统ReiserFS作者Hans Reiser因谋杀妻子被判入狱15年之后,ReiserFS的开发并没有停止,虽然它至今没有合并到Linux主支。一小群开发者仍然在继续开发ReiserFS的第四个版本(简称Reiser4),他们上个月发布了新版本,支持Linux3.5.4内核。

以上就是Mysql-索引-BTree类型【精简】的内容,更多相关内容请关注PHP中文网(www.php.cn)!




声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
将用户添加到MySQL:完整的教程将用户添加到MySQL:完整的教程May 12, 2025 am 12:14 AM

掌握添加MySQL用户的方法对于数据库管理员和开发者至关重要,因为它确保数据库的安全性和访问控制。1)使用CREATEUSER命令创建新用户,2)通过GRANT命令分配权限,3)使用FLUSHPRIVILEGES确保权限生效,4)定期审计和清理用户账户以维护性能和安全。

掌握mySQL字符串数据类型:varchar vs.文本与char掌握mySQL字符串数据类型:varchar vs.文本与charMay 12, 2025 am 12:12 AM

chosecharforfixed-lengthdata,varcharforvariable-lengthdata,andtextforlargetextfield.1)chariseffity forconsistent-lengthdatalikecodes.2)varcharsuitsvariable-lengthdatalikenames,ballancingflexibilitibility andperformance.3)

MySQL:字符串数据类型和索引:最佳实践MySQL:字符串数据类型和索引:最佳实践May 12, 2025 am 12:11 AM

在MySQL中处理字符串数据类型和索引的最佳实践包括:1)选择合适的字符串类型,如CHAR用于固定长度,VARCHAR用于可变长度,TEXT用于大文本;2)谨慎索引,避免过度索引,针对常用查询创建索引;3)使用前缀索引和全文索引优化长字符串搜索;4)定期监控和优化索引,保持索引小巧高效。通过这些方法,可以在读取和写入性能之间取得平衡,提升数据库效率。

mysql:如何远程添加用户mysql:如何远程添加用户May 12, 2025 am 12:10 AM

ToaddauserremotelytoMySQL,followthesesteps:1)ConnecttoMySQLasroot,2)Createanewuserwithremoteaccess,3)Grantnecessaryprivileges,and4)Flushprivileges.BecautiousofsecurityrisksbylimitingprivilegesandaccesstospecificIPs,ensuringstrongpasswords,andmonitori

MySQL字符串数据类型的最终指南:有效的数据存储MySQL字符串数据类型的最终指南:有效的数据存储May 12, 2025 am 12:05 AM

tostorestringsefliceflicyInmySql,ChooSetherightDataTypeBasedyOrneOrneEds:1)USEcharforFixed-LengthStstringStringStringSlikeCountryCodes.2)UseVarcharforvariable-lengtthslikenames.3)USETEXTCONTENT.3)

mysql blob vs.文本:为大对象选择正确的数据类型mysql blob vs.文本:为大对象选择正确的数据类型May 11, 2025 am 12:13 AM

选择MySQL的BLOB和TEXT数据类型时,BLOB适合存储二进制数据,TEXT适合存储文本数据。1)BLOB适用于图片、音频等二进制数据,2)TEXT适用于文章、评论等文本数据,选择时需考虑数据性质和性能优化。

MySQL:我应该将root用户用于产品吗?MySQL:我应该将root用户用于产品吗?May 11, 2025 am 12:11 AM

No,youshouldnotusetherootuserinMySQLforyourproduct.Instead,createspecificuserswithlimitedprivilegestoenhancesecurityandperformance:1)Createanewuserwithastrongpassword,2)Grantonlynecessarypermissionstothisuser,3)Regularlyreviewandupdateuserpermissions

MySQL字符串数据类型说明了:选择适合您数据的合适类型MySQL字符串数据类型说明了:选择适合您数据的合适类型May 11, 2025 am 12:10 AM

mySqlStringDatatatPessHouldBechoseBeadeDataCharacteristicsAndUsecases:1)USECHARFORFIXED LENGTHSTRINGSTRINGSLIKECOUNTRYCODES.2)USEDES.2)usevarcharforvariable-lengtthstringstringstringstringstringstringstringslikenames.3)usebinaryorvarrinaryorvarinarydatalbonydatalgebgeenfopical.4)

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。