1.MySQL为什么要采用B+树的数据结构?

  1. hash散列算法,不支持排序和范围查询
  2. 二叉树虽然支持范围查询,但是会出现极端失衡
  3. 红黑树不能从本质上解决失衡的问题
  4. B树的每个节点上都存有一份数据,这样每次从磁盘中取回的数据很多
  5. B+树只在叶子节点存贮有数据,这样从磁盘上读取的数据就少得多了

    2.请你说说B树和B+树的区别?

  6. B树的叶子节点没有指针,B+树的叶子节点有指针

  7. B树的非叶子节点的数据都冗余了一份到叶子结点,而B+数只有叶子节点有数据

    3.InnoDB为什么推荐使用整形自增的id作为主键?

  8. 整形可以保证在比较的时候效率更高

  9. 自增是因为,不规律的id会增加B+树的自旋,影响性能

    4.为什么普通索引的叶子结点存储的是主键值?

  10. 为了节约空间

冗余的数据会造成空间的浪费

  1. 为了修改时简化操作

如果在每个索引树上都放上相同的数据,在修改了某个数据之后,所有的索引树的数据都要修改,而不是修改一份

5.简述InooDB和MySAM的区别?

  1. InnoDB支持事务,而MySAM不支持事务
  2. InnoDB支持外键,而MySAM不支持外键
  3. InnoDB支持行锁,而MySAM支持表锁
  4. InnoDB是聚集索引,而MySAM是非聚集索引

    6.请你说说MySQL的事务回滚机制?

    当客户端操作数据库的时候,先将数据存储到缓存中,当提交之后才会存储到数据库中,在这个过程中,如果出现了异常,这时候就会清除缓存,撤销提交的操作,这就是回滚机制

    7.请你说说MySQL中left join、right join、inner join的区别?

  5. left join

左连接,以左表为主,左表查询出来的数据显示全部,右表查询出来的数据,显示和左表有交集的部分
image.png

  1. right join

右连接,以右表为主,右表查询出来的数据显示全部,左表查询出来的数据,显示和右表有交集的部分
image.png

  1. inner join

内连接,查询出来的是两个表的交集部分

8.如何理解三大范式?

  1. 数据表的每一列都不可在分割,保持原子性
  2. 非主键依赖于主键
  3. 非主键不能依赖于非主键