Mysql面试题

ACID 靠什么保证

  • A :atomicity 原子性由undo log日志保证,记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
  • C: consistency 一致性由其他三大特征保证、程序代码要保证业务上的一致性
  • I : isolation 隔离性由MVCC保证
  • D : durability 持久性由内存+redo log 来保证,mysql修改数据同时在内存和redo log记录这次操作,宕机时可以从redo log恢复

B树和B+树的区别

  • B树的特点:
    1. 节点排序
    2. 一个节点可以存多个元素,多个元素也排序了
  • B+树的特点:
    1. 拥有B树的特点
    2. 叶子节点之间有指针
    3. 非叶子节点上的元素在叶子节点上都冗余了,也就是叶子节点中存储了所有元素,并且排序

mysql索引使用B+树,因为索引是用来加速查询的,而B+树通过对数据进行排序,所以是可以提高查询熟读的,然后通过一个节点中可以存储多个元素,从而B+树的高度不会太高,在mysql中一个innodb页就是一个B+树节点,一个innodb页默认16kb,所以一般情况下一颗两层的B+树可以存2000万行左右的数据,然后通过利用B+树叶子节点存储了所有数据并且进行了排序,并且叶子结点之间有指针,可以很好的支持全表扫描,范围查找等sql语句

InnoDB是如何实现事务

innodb是通过Buffer Pool,LogBuffer, Redo log,undo log实现,以update语句为例:

  1. innodb在收到update语句后,会先根据条件找到数据所在的页,并将该页缓存在Buffer Pool中
  2. 执行update语句,修改Buffer pool中的数据,也就是内存中的数据
  3. 针对update语句生成一个redo log对象,并存入logbuffer中
  4. 针对update语句生成undo log日志,用于事务回滚
  5. 如果事务提交,那么则把redo log对象进行持久化,后续还有其他机制将buffer pool中所修改的数据持久化
  6. 如果事务回滚,则利用 undo log日志进行回滚

慢查询优化

  1. 检查是否走了索引,如果没有则优化sql利用索引
  2. 检查所利用的索引,是否是最优索引
  3. 检查所查字段是否都是必须的,是否查询了过多字段,查出了多余数据
  4. 检查表中数据是否过多,是否应该进行分库分表
  5. 检查数据库实例所在机器的性能配置,是否太低,是否可以适当增加资源
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值