【MYSQL】InnoDB行溢出数据说明

  
  
  
  
  65532字节该如何存储?这个时候就会发生行溢出。
  
  <强>行溢出:
  ,,InnoDB存储引擎可以将一条记录中的某些数据存储在真正的数据页面之外,一般为BLOB \ LOB这类的大对象列类型。但是也不是绝对,BLOB可以不将数据放在溢出页面,而且即便是VARCHAR列数据类型,依然有可能被存放为行溢出数据,比如上例
  
  ,,我们执行:插入表名,选择重复(' a ', 65532),就将一行65532字节的数据插入到表中了,实际上在底层,真正的数据页只存储了一小部分数据,之后是偏移量,指向行溢出数据,这时会产生N个未压缩的二进制大对象页未压缩的BLOB页面,这些大对象页中才是完整存放了65532字节的数据。
  
  ,,那么,一行数据为多大时,会发生行溢出呢?我们知道InnoDB存储引擎表是索引组织的,即B +树结构,这样一个页中至少要保证有2条数据,否则就变成链表了,如果只能存放一条数据,那么InnoDB存储引擎会自动将它存放在溢出页中。如果可以在一个页中至少放入两行数据,那么就不会发生行溢出
  ,,,
  ,,其实对于BLOB类型的数据,跟varchar也是一个道理,要看实际的大小,当然,用户既然使用了BLOB列类型,一般不可能存放长度过小的数据,因此在大多数情况下团的行数据还是会发生行溢出,实际数据保存在BLOB页中,数据页只保存数据的前768字节。
  
  

【MYSQL】InnoDB行溢出数据说明