局部性原理
sql 查询数据时,内存会把查询目标附近的数据也返回,系统分析这些周边的数据也马上会被用到
行溢出
行数据的大小超过页能承载的最大值,导致一行的数据需要跨页展示
MyISAm(堆表)
InnoDB(聚集)
本质为B+树,只在子节点存放数据
页:针对行数据分组,每页存放对应行数据
目录页:页指针 + 此页最小的主键Id
对索引的识别次序:主键索引--》唯一索引--》InnoDB自建默认索引
数据存放: 叶子节点--》只存放数据
非叶子节点 --》可以存储多个节点数据
数据存放
对于主键索引来说,叶子节点存放的为行数据
对于聚集索引来说,叶子节点存放数据记录的主键,拿到主键之后进行回表,查出对应的行记录
数据库隔离级别
B事务可能会读到A事务还未提交的事务数据,可能会出现脏读
A事务可能会读到B事务提交的数据,提交前后可能会有数据不一致的情况,出现不可重复读,幻读
A事务不会读到B事务提交的数据
除过查查,各事务的执行会出现阻塞,A事务执行完毕,才会执行B事务
版本链
对于使用InnoDB 引擎的表来说,每条数据行都会有两个必要的隐藏列
- trx_id: 每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id 隐藏列
- roll_pointer: 每次对某条记录进行修改时,这个隐藏列会寸一个指针,指针指向该记录修改之前的信息