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列,保存上一个版本的地址
创建索引的原则?
- 最左匹配原则
- 重复度低
- 不经常更改
- 区分度的高
- 索引尽量扩展,而不是新建