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