1.myql默认的存储引擎是Innodb,数据库读取和操作数据都是通过存储引擎进行的。
2.Innodb为了避免从磁盘读取数据过多,将存储数据在磁盘和内存中通过页为单位进行交互,一个页默认16kb,一般情况一次读取最少读取16kb内容
3.Innodb引擎中的记录行格式有四种分别为COMPACT(如图),Redundant,Dynamic(mysql5.7后默认),Compressed。
4.一个记录行中记录的数据除了真实数据还有额外数据(变长字段长度列表,NULL值列表,记录头信息),当页中的记录数据太多导致当前页面放不下时,会发生行溢出(把多余的数据存储到其他页中)。COMPACT行格式如果发生行溢出会把真实数据存储到其他页面中,只在记录的真实数据记录其它页面的地址。Dynamic和Compressed记录真实数据存储字符串的钱768个字节,其他字节存储到其他页,Compressed格式会采用压缩算法对页面进行压缩以减少存储空间。
5.Innodb有不同种类的数据页,存储表记录的成为数据页,数据页由File Header, Page Header, Infimun+Supremun, User Records, Free Space, Page Directory, File Trailer几部分组成。
6.Innodb页中所有记录都是按主键大小排列的单向链表,通过记录头中的next_record进行相连。
7.每个数据页的File Header都有上一页和下一页的编号,同一层级的数据页会组成双向链表。
8.每个记录除了数据本身,还有row_id(非必须有,如果设置了主键或者有唯一索引不会生成), transaction_id书屋id, roll_pointer回滚指针。
9.Innodb记录的记录投中的一些重要信息: