在mysql中, 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。
row_format还有其他一些值:
DEFAULT
FIXED--静态
DYNAMIC--动态
COMPRESSED
REDUNDANT
COMPACT
fixed:默认格式,
当表不包含变长字段(varchar / varbinary / blob / text)时使用,
每行都是固定的,所以很容易获取行在页上的具体位置,存取效率比较高,
但是占用磁盘空间较大
dynamic:
每行都有一个行头部,包含bitmap,记录列为空的情况。(字符类型长度为0,或数字类型为0,而不是NULL值)
所有字符串列都是动态存储的,除非长度小于4;
fixed->dynamic : 会导致CHAR->VARCHAR,反之亦然,
MYISAM引擎可以修改ROW_FORMAT,InnoDB不可以,默认Compact
REDUNDANT为固长,有冗余,COMPACT更灵活