描述下TINYINT(1)、INT(10)
在MySQL命令中,字段的类型长度TINYINT(2)、INT(11)不会影响数据的插入,只会在使用ZEROFILL时有用,让查询结果前填充.
mysql的表关联常见有两种算法
1、 嵌套循环连接 Nested-Loop Join(NLJ) 算法,适用于关联字段有索引
2、 基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法,适用于关联字段没有索引
讲一下MVCC
undo日志版本链是指一行数据被多个事务依次修改过后,在每个事务修改完后,Mysql会保留修改前的数据undo回滚日志,并且用两个隐藏字段trx_id和roll_pointer把这些undo日志串联起来形成一个历史记录版本链,叫做一致性视图read-view
可重复读隔离级别(RR),当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化(如果是读已提交隔离级别在每次执行查询sql时都会重新生成).
innodd引擎执行的bufferPool机制
单双路排序
单路:一次性取出所有字段.在内存中排序
讲一下mysql的双写
InnoDB 使用日志先行策略,将数据修改先在内存中完成,并且将事务记录成重做日志(Redo Log),转换为顺序IO高效的提交事务.日志记录到数据库以后,对应的事务就可以返回给用户,表示事务完成。但是实际上,这个数据可能还只在内存中修改完,并没有刷到磁盘上去。内存是易失的,如果在数据落地前,机器挂了,那么这部分数据就丢失了。InnoDB 通过 redo 日志来保证数据的一致性。如果保存所有的重做日志,显然可以在系统崩溃时根据日志重建数据。
行锁
InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为.Next-Key Locks是行锁与间隙锁的组合。