##1.InnoDB中的变长列

变长列就是数据长度不固定的列。

##2.行溢出数据

##3.行记录格式

#####3.1Redundant(冗余)

  • header 列数量,字段偏移表的单位,下一行记录的指针等信息
  • rowid 没有可用的主键时,使用rowid来作为隐藏主键
  • txid transactionid 事务id
  • roll pointer 回滚指针
  • col 未溢出数据

溢出数据的情况:

那么这种数据格式为什么叫做冗余呢?就是因为字段便宜列表这段信息,因为它记录的每个字段的相对位置这个本身就存在冗余,因为当字段是不定长的时候我们有必要知道偏移量,但是如果是定长字段,我们就可以自己推断出他的所在位置。

#####3.2Compact

null标志位: 指示行记录中的null值,每个bit代表一个字段。

所以这个compact相比于之前的冗余,也就改变了前两个数据,也就是边长字段长度表和null标志位。 其实就是辅助我们可以找到每个字段对应的值。

#####3.3Dynamic

Dynamic相较于之前的数据格式做的改动在于数据溢出的这块逻辑;

如果大于一个阈值就仅存一个blob页的指针。

这样的话就更加节约了行记录的空间。

之所以叫做Dynamic,动态,就是因为他的字段数据有时候存的数据有时候存的是个指针。

#####3.4Compressed

他在动态数据格式的基础上做了一个压缩的逻辑。就是典型的用时间换空间的转换。所以实际用途中不多,一般都是动态数据格式。

##4.总结

##5.针对于数据存储的优化

数据量做一个控制,一般控制在500万,甚至在300万以内。