MYSQL中常见的知识问题(二)

1、B树和B+树的区别,MYSQL为啥使用B+树。

1.1、B树

目的:为了存储设备或者磁盘设计的一种平衡查找树。

定义(M阶B树):a、树中的每个节点最多有m个孩子。

                               b、除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子。

                               c、若根节点不是叶子节点,则根节点最少含有2个孩子。

                               d、所有叶子节点都在同一层,叶子节点不包含任何关键字信息。

1.2、B+树

特点:a、是B树的一种变形,把数据都存储在叶子节点(叶子节点的最小值作为索引),内部只存关键字和孩子节点,简化了内部节点 。

           b、B+树的遍历高效,将所有叶子节点串联成链表即可从头到尾遍历。

定义:a、有n棵子树的节点含有n个关键字,每个关键字都不保存数据,只用来索引,并且所有的数据都存储在叶子节点。

           b、所有叶子节点包含所有关键字信息和指向关键字记录的指针。

 其中关键字从小到大顺序链接。               

 1.3、MYSQL为啥使用B+树

1、B+树的磁盘读写代价更低,因为B+树内部节点没有指向关键字具体信息的指针,内部节点相对B树小

2、B+树的查询更加稳定,因为内部节点并不是指向文件内容的节点,仅仅是作为叶子节点的关键字索引,因此所有的关键字查询都会走一条从根节点到叶子节点的路径。即所有关键字查询的长度是一样的,查询效率稳定。

2、数据设计的三大范式,开发中应该怎么对待

第一范式:确保每列字段保持原子性,即不可分。

第二范式:确保表中的每列都和主键有关。

第三范式:确保每列和主键列直接相关,而不是间接相关。

反范式化:开发中可以适当增加冗余字段,以空间换取时间。

3、MYSQL中解决死锁问题的策略

3.1、死锁问题描述

a、资源A和资源B,都是不可剥夺资源;
b、进程C已经申请了资源A,进程D也申请了资源B;
c、进程C接下来的操作需要用到资源B,而进程D恰好也在申请资源A;
进程C、D都得不到接下来的资源,那么就引发了死锁

3.2、死锁的必要条件 

1、互斥条件:资源不能共享,只能由一个进程使用。

2、请求与保持条件:已经得到资源的进程可以再次申请新的资源。

3、不可剥夺条件:已经分配的资源不能从相应的进程中被强制的剥夺。

4、环路条件/循环等待条件:系统若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

3.3、死锁处理策略 

避免策略:预先静态分配法——破坏了不可剥夺条件;资源有序分配法——破化了环路条件

检测与恢复策略:一段时间检测是否有死锁,如果有就剥夺某一个资源,打开死锁,两种办法恢复死锁。

a、进程终止

b、资源回收

鸵鸟策略 :只有出现死锁的情况,才处理死锁.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一瞬にして失う

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值