首页 > 数据库 >MySQL中为什么使用B+树做索引而不采用B-树

MySQL中为什么使用B+树做索引而不采用B-树

时间:2023-08-06 11:45:02浏览次数:57  
标签:为什么 遍历 查询 叶子 索引 IO MySQL 节点

B-树在提高了IO性能的同时并没有解决元素遍历的低下的问题,然而B+树只需要去遍历叶子节点就可以实现遍历整棵树。由于数据库中基于范围的查找是非常频繁的,B树的查找效率就很低下。

主要原因:

1.B+树的磁盘读写代价更低:B-树/B+树的特点就是每层节点数目非常多,层数很少,目的就是为了减少磁盘IO次数,B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对于B-树更小,但是B-树的每个节点都有数据域,这就无形之中增加了节点的大小,也就是说增加了磁盘IO次数。然而B+树除了叶子节点外其他阶段并不存储数据,节点小,磁盘IO次数就降低了。

2.B+树的查询效率更加稳定:B+树只有叶节点存放数据,其余节点用来索引,所以任何关键字的查找必须走一条从根节点道叶子节点的路,所以关键字查询的路径长度相同,导致每个数据的查询效率相当。然而B-树中每个索引节点都会有数据域。

3.B+树由于它所有的数据域都在叶子节点上,并且所有叶子节点之间都有一个链指针。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。在数据库中基于范围的查询就很频繁,然而B树就不支持这样的遍历操作。因为其分支节点同样存储着数据,要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况。因此B+树更适合用于数据库索引。

标签:为什么,遍历,查询,叶子,索引,IO,MySQL,节点
From: https://www.cnblogs.com/huwy-123/p/17609226.html

相关文章

  • Mysql按照固定时间间隔统计数据
    SELECTCODE,TM,SUM(DRP)FROMxxTableWHERE CODE='409K0044'and`TM`>='2023-01-0108:00:00' ANDMOD(unix_timestamp(`TM`)-unix_timestamp('2023-01-0108:00:00'),24*60*60)BETWEEN0 AND1 GROUPBYCODE,TM DRP是需......
  • mysql-单表查询
    --单表查询--一、创建查询环境createtableifnotexistsfruits(f_idvarchar(10)notnullcomment'水果编号',s_idintnotnullcomment'批发商代号',f_namevarchar(50)notnullcomment'水果名称',f_pricedecimal(8,2)notnullcomment'水果价格......
  • MySQL学习--索引
    索引的创建有利有弊,创建索引可以提高查询速度,但是过多的索引则会占据许多磁盘空间。因此,在创建索引之前,需要权衡利弊创建索引方式分为手动和自动索引自动索引:设置表中某个字段为主键或者唯一约束时,系统会自动创建关联该字段的唯一索引手动索引:手动在表上创建索引MySQL支持6种......
  • MySQL学习--普通索引
    在创建表时创建索引,已有表创建索引,altertable创建索引1.在创建表时创建索引createtableemp(enamevarchar(20),deptnoint(10)primarykeyauto_increment,indexindex_niu(deptno));explainselect*fromempwheredeptno=22; 2.已有表创建索引createtable......
  • MySQL学习--唯一索引
    唯一索引:就是创建索引时,限制索引的值必须唯一 1.在创建表时创建索引createtableemp(enamevarchar(20),deptnoint(10)primarykeyauto_increment,uniqueindexindex_niu(deptno));explainselect*fromempwheredeptno=22; 2.已有表创建索引createtable......
  • MySQL学习-完整性约束
    notnull约束字段不能为空default设置字段的默认值unique约束字段值唯一primarykey唯一且不为空auto_increment自动增加foreignkey多表之间 ......
  • 五、创建高性能的索引
    5.1索引基础索引可以包含一个或多个列的值。如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列。创建一个包含两个列的索引,和创建两个只包含一列的索引是大不相同的。1)索引的类型B-Tree类型全值匹配:指的是和索引中的所有列进行匹配匹配最左......
  • MySQL Server 5.5的安装及遇到问题记录
    一、安装安装没有什么说的,不会看图(版本,我选择自定义——Custom,供参考)                        --------------------------------------------------------------------------二、问题记录:安装后遇到的问题 1.安装mysql......
  • MySQL多实例
    MySQL多实例介绍应用场景:资金紧张公司若公司资金紧张,公司业务访问量不太大,但又希望不同业务的数据库服务各自能够尽量独立地提供服务而互相不受影响,或者,还有需要主从复制等技术提供备份或读写分离服务的需求,那么,多实例就再好不过了。用户并发访问量不大的业务当公司业务访问......
  • 【ES】创建索引
    通过Elasticsearch的RESTFulAPI来创建索引:PUThttp://{host}:9200/{index}默认情况下,创建的索引分片数量是5个,副本数量是1个。如果要指定分片数、副本数量:{ "settings":{ "number_of_shards":3, "number_of_replicas":2 }}使用CURL命令curl-XPUT"l......