1、B树与B+树的区别?
B树
B+树
1)B树的节点中没有重复元素,B+树有。
2)B树的中间节点会存储数据指针信息,而B+树只有叶子节点才存储。
3)B+树的每个叶子节点有一个指针指向下一个节点,把所有的叶子节点串在了一起。
2、binlog与redolog的区别?
结合MySQL更新流程看 undolog、redolog、binlog
binlog是逻辑日志,记录的是对哪一个表的哪一行做了什么修改;redo log是物理日志,记录的是对哪个数据页中的哪个记录做了什么修改,如果你还不了解数据页,你可以理解成对磁盘上的哪个数据做了修改。
binlog是追加写;redo log是循环写,日志文件有固定大小,会覆盖之前的数据。
binlog是Server层的日志;redo log是InnoDB的日志。如果不使用InnoDB引擎,是没有redo log的。
3、SQL语句的执行过程?
- 服务器与MySQL建立连接
- 依次经过Server层的分析器、优化器、执行器
- 执行器根据执行计划操作InnoDB引擎
- InnoDB从磁盘数据文件中将age=1读到缓冲池
- 在修改之前,写入一条undo log将age=1存起来
- 将缓冲池中的age=1改成age=2
- 写入一条redo log将修改后的值age=2存起来
- 写入一条binlog将修改后的值age=2存起来
4、事务还没提交的时候,redo log 能不能被持久化到磁盘呢?
会
5事务的隔离类型与实现原理
类型
读未提交
读已提交
可重复读
串行化
实现原理(mvcc)
版本链(undo log)
1、对于InnoDB存储引擎,每一行记录都有两个隐藏列 trx_id、roll_pointer(如果表中没有主键和非NULL唯一键时,则还会有第三个隐藏的主键列row_id)。
2、多个事务并行操作某一行数据时,不同事务对该行数据的修改会产生多个版本,然后通过回滚指针(roll_pointer),连成一个链表,这个链表就称为版本链。
read view