Mysql底层分析

局部性原理

sql 查询数据时,内存会把查询目标附近的数据也返回,系统分析这些周边的数据也马上会被用到

行溢出

行数据的大小超过页能承载的最大值,导致一行的数据需要跨页展示

MyISAm(堆表)

InnoDB(聚集)

本质为B+树,只在子节点存放数据

页:针对行数据分组,每页存放对应行数据
目录页:页指针  + 此页最小的主键Id

对索引的识别次序:主键索引--》唯一索引--InnoDB自建默认索引
数据存放: 叶子节点--》只存放数据
         非叶子节点 --》可以存储多个节点数据 

数据存放

对于主键索引来说,叶子节点存放的为行数据
对于聚集索引来说,叶子节点存放数据记录的主键,拿到主键之后进行回表,查出对应的行记录

数据库隔离级别

  • 读未提交 READ UNCOMMITTED
B事务可能会读到A事务还未提交的事务数据,可能会出现脏读
  • 读已提交
A事务可能会读到B事务提交的数据,提交前后可能会有数据不一致的情况,出现不可重复读,幻读
  • 可重复度(默认)
A事务不会读到B事务提交的数据
  • 串行化
除过查查,各事务的执行会出现阻塞,A事务执行完毕,才会执行B事务

版本链

对于使用InnoDB 引擎的表来说,每条数据行都会有两个必要的隐藏列
  • trx_id: 每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id 隐藏列
  • roll_pointer: 每次对某条记录进行修改时,这个隐藏列会寸一个指针,指针指向该记录修改之前的信息

猜你喜欢

转载自blog.csdn.net/weixin_44971379/article/details/121006247