B树和B+树的区别是什么?

都是每个节点都存储了多个数据

都是排序树

B+树:非叶子节点存储索引,叶子节点存储值;每一个叶子节点都指向下一个叶子节点

MySQL的InnoDB中的B+树叶子节点指向上一个和下一个叶子节点


mysql有哪些锁?

按锁的粒度分类:

行锁

表锁

间隙锁

排他锁,加锁后其他事务不能读,不能上锁,不能写

共享锁,加锁后其他事务可以读,可以上锁,但不能写

乐观锁,通过版本号来实现

悲观锁


acid怎么保证?

A原子性通过undolog日志保证,记录了要回滚的日志信息,事务回滚时撤销已经执行成功的sql

C一致性由其他三大特性保证

I隔离性由MVCC来保证

D持久性由内存+redolog来保证,mysql修改数据的同时,在内存和redolog日志中记录着这次操作,如果宕机了可以从redolog恢复


主从同步怎么实现?

从服务器订阅主服务器的binlog日志


什么是MVCC?

mvcc是多版本并发控制,mvcc只在读已提交和可重复读中,解决了脏读和不可重复度问题,使用行锁表锁解决了幻读问题

每条数据都有一个隐藏的roll_pointer列,保存上一个版本的地址


创建索引的原则?

  1. 最左匹配原则
  2. 重复度低
  3. 不经常更改
  4. 区分度的高
  5. 索引尽量扩展,而不是新建