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、资源回收
鸵鸟策略 :只有出现死锁的情况,才处理死锁.