能今天做好的事就不要等到明天。以梦为马,学习趁年华。
文章目录
前言
没有任何文笔,都是写给自己看的,算是对知识的复习,本篇都是InnoDB的八股文知识。
一、MySQL存储引擎
1. InnoDB特点
优势:独立表空间,支持MVCC,行锁设计,提供一致性非锁定读,支持外键;
特性:插入缓冲,二次写,自适应哈希索引,预读;
存储方式:使用聚集的方式存储数据,每张表的存储都是按主键顺序存放。
2.MyISAM和InnoDB区别
(1)InnoDB支持事务,MyISAM不支持事务;
(2)InnoDB支持外键,MyISAM不支持外键;
(3)InnoDB不支持全文索引,MyISAM支持全文索引;
(4)InnoDB支持表、行(默认)级锁,MyISAM支持表级锁;
(5)InnoDB表必须有唯一索引,MyISAM表可以没有;
(6)Innodb存储文件有frm、ibd,Myisam是frm、MYD、MYI;
(7)InnoDB不保存表的具体行数,MyISAM用一个变量保存了整个表的行数。
3.存储引擎选择
MySQL5.5后默认支持InnoDB为存储引擎,你如果对MyISAM和InnoDB不是特别的熟悉,推荐你选择InnoDB存储引擎。
二、InnoDB页
1.InnoDB页简介
InnoDB 是通过页方式将数据持久化到磁盘上的存储引擎,则即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。
页是MySQL中磁盘和内存交互的基本单位,也是MySQL是管理存储空间的基本单位 。
2.数据存储方式
为了解决磁盘读写IO慢的问题,InnoDB采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小 一般为 16 KB。
3. InnoDB行格式
Compact 、 Redundant 、 Dynamic 和 Compressed 行格式 。
4. 行溢出
一个页一般是 16KB ,当记录中的数据太多,当前页放不下的时候,会把多余的数据存储到其他页中,这种 现象称为行溢出。
5.数据页组成
File Header ,表示页的一些通用信息,占固定的38字节。
Page Header ,表示数据页专有的一些信息,占固定的56个字节。
Infimum + Supremum ,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。
User Records :真实存储我们插入的记录的部分,大小不固定。
Free Space :页中尚未使用的部分,大小不确定。
Page Directory :页中的某些记录相对位置,也就是各个槽在页面中的地址偏移量,大小不固定,插 入的记录越多,这个部分占用的空间越多。
File Trailer :用于检验页是否完整的部分,占用固定的8个字节。