Mysql和B+数

基本搜索结构:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
B-树的插入分析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

B+树相比B树的变化:
B+树是B树的变形,也是一种多路搜索树,其定义基本与B树相同,除了:
1、一个节点中关键字的数量和孩子的数量相等(规则简洁)。
2、所有值都要出现在叶子节点上,非叶子节点中的值只是充当路径索引,并且叶子节点要链接起来(方便遍历),非叶子节点由叶子节点的最小值构成。
3、为所有叶子节点增加一个链指针。
4、所有关键字都在叶子节点出现。
5、非叶子节点的子树指针p[i],指向关键字值属于【k[i], k[i+1]】的子树。
在这里插入图片描述
在这里插入图片描述

Mysql的两种引擎:
(1)MyISAM引擎是MySQL5.5.8版本之前默认的存储引擎,不支持事务,支持全文检索,使用B+树作为全文索引结构,叶子节点的data域存放的是数据记录的地址。
在这里插入图片描述
在这里插入图片描述

(2)InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理应用,从MySQL数据库5.5.8版本开始,InnoDB存储引擎是默认的存储引擎。InnoDB支持B+数索引、全文索引、哈希索引。但InnoDB使用B+树作为索引结构时,具体实现方式却与MyISAM截然不同。
在这里插入图片描述
在这里插入图片描述
第一个区别是 InnoDB的数据文件本身就是索引文件。MyISAM索引文件和数据文件是分离的,索引文件仅保存数据的地址。而InnoDB索引,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
第二个区别是 InnoDB的辅助索引data域存储相应数据主键的值而不是地址,所有辅助索引都引用主键作为data域。也就是意味着使用辅助索引查找得查找两次,一次先查找到主键,再使用主键查找到需要的值。
聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。
上图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据,这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。

MySQL为什么使用B+树而不是B-树?
MySQL作为关系型数据库该如何衡量查询效率呢?–磁盘IO次数
关系数据库这种数据量大索引能达到亿级别,为了减少内存的占用,索引也会被存储在磁盘上。B-树/B+树的特点就是每层节点数目非常多,层数少,目的就是为了减少磁盘的IO次数,但是B-树的每个节点都有data域(指针),这无疑是增大了节点大小,也增加了磁盘的IO次数(因为磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就会减少,IO次数也会增多),而B+树除了叶子节点其他节点并不存储数据,节点小,磁盘IO次数就少。
B+树只有叶子节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。
B+树所有的Data域在叶子节点,并且所有叶子节点之间都有一个链指针。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问了。在数据库中基于范围的查询时非常频繁的,而B树不支持这样的遍历操作。

事务: 一张表存储大家微信钱包的余额,A转账100块给B:

update Amoney = Amoney-100 from xxx where name == A
update Bmoney = Bmoney+100 from xxx where name == B

假设第一条执行成功,第二条执行失败,那么这里就出大问题。
要么都成功,要么都失败,执行两条sql语句之前开启事务,执行两条sql语句成功,则提交事务,执行失败则回滚。
事务的ACID特性:
原子性(Atomicity): 事务是应用中最小的执行单位,就如原子是自然界的最小颗粒,具有不可再分的特征一样,事务是应用中不可再分的最小逻辑执行体。
一致性(Consistency): 事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而改未完成的事务对数据库所做的修改已被写入数据库,此时数据库就处于一种不正确(不一致)的状态。因此一致性是通过原子性来保证的。
隔离性(Isolation): 各个事务的执行互不干扰,任意一个事务的内部操作对其他并发事务都是隔离的。也就是说,并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能互相影响。
持久性(Durability): 持久性是指一个事务一旦被提交,它对数据库所做的改变都要记录到永久存储当中(如:磁盘)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值