1.定义:B-树是一类树,包括B-树、B+树、B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.
2.B-数产生的原因
当数据量非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中。
一般而言内存访问的时间约为 50 ns(纳秒),而磁盘在 10 ms (毫秒)左右
3.B-树和B+树的区别
(1)B+树内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log(n)。
而B-树查询时间复杂度不固定,与 key 在树中的位置有关, 最好为O(1)。
(2)B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。
(3)B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确
(4)在数据结构上:B树为有序数组+平衡多叉树,而B+树为有序数组链表+平衡多叉树
4.为什么 Mysql 使用B+树
(1)Mysql 是一种关系型数据库,区间访问是常见的一种情况,而 B-树并不支持区间访问(可参见上图),
而B+树由于数据全部存储在 叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历甚至全部遍历。
(2)B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找
(3)B+树的查询效率更加稳定,数据全部存储在叶子节点,查询时间复杂度固定为 O(log n)
(4)B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确
5.mysql B-Tree索引使用案例
(1)单列索引使用管理
# 语法:
create index index_name on table_name(col_name);
alter table table_name add index index_name(col_name);
# 案例:
use yzjtestdb;
create index yzjtest_m1_inx_name on yzjtestdb.yzjtest_m1(NAME);
alter table yzjtestdb.yzjtest_m1 add index yzjtest_m1_inx_tel(TEL);
# 查看已创建索引:
show index from yzjtestdb.yzjtest_m1;
# 索引使用:
explain select * from yzjtestdb.yzjtest_m1 where name = 'yzjtest30000010';
explain select * from yzjtestdb.yzjtest_m1 where tel = '13379855952';
# 索引删除:
drop index yzjtest_m1_inx_name on yzjtest_m1;
drop index yzjtest_m1_inx_tel on yzjtest_m1;
(2)复合索引使用管理
# 语法:
create index index_name on table_name(col_name1,col_name2);;
alter table table_name add index index_name(col_name1,col_name2);
# 案例:
use yzjtestdb;
create index yzjtest_m1_inx_name_tel on yzjtestdb.yzjtest_m1(NAME,TEL);
alter table yzjtestdb.yzjtest_m1 add index yzjtest_m1_inx_name_tel(NAME,TEL);
# 查看已创建索引:
show index from yzjtestdb.yzjtest_m1;
# 索引使用:
explain select * from yzjtestdb.yzjtest_m1 where name = 'yzjtest30000010'
and tel = '13379855952';
# 索引删除:
drop index yzjtest_m1_inx_name_tel on yzjtest_m1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1899次阅读
2025-04-09 15:33:27
【DBA坦白局】第一期:在小城市和一线城市做DBA,是“躺”还是“卷”?
墨天轮编辑部
1312次阅读
2025-04-10 14:17:22
Oracle Concepts(Oracle 19c):07 SQL
Ryan Bai
1011次阅读
2025-04-09 10:57:11
2025年3月国产数据库大事记
墨天轮编辑部
873次阅读
2025-04-03 15:21:16
2025 DBA 薪资观察:做 DBA 还香吗?
墨天轮编辑部
639次阅读
2025-04-24 15:53:21
Oracle DBA 高效运维指南:高频实用 SQL 大全
Lucifer三思而后行
632次阅读
2025-03-28 21:52:03
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
606次阅读
2025-04-10 15:35:48
月薪快6万的DBA,有命干不一定有命花
多明戈教你玩狼人杀
560次阅读
2025-04-18 10:36:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
553次阅读
2025-04-15 17:24:06
如何利用Deepseek自动优化SQL并推送
潇湘秦
513次阅读
2025-03-28 10:02:33