
在mysql中, 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。
所以,做搜索查询量大的表一般都以空间来换取时间,设计成静态表。
row_format还有其他一些值:
DEFAULT
FIXED
DYNAMIC
COMPRESSED
REDUNDANT
COMPACT
修改行格式
ALTER TABLE table_name ROW_FORMAT = DEFAULT
修改过程导致:
fixed--->dynamic: 这会导致CHAR变成VARCHAR
dynamic--->fixed: 这会导致VARCHAR变成CHAR
show TABLE STATUS 该命令用于返回当前库中的所有表概览,通过添加 pattern 可以显示指定表的概览譬如: show TABLE STATUS like 'mytable%'返回信息格式如下:
其中需要注意的是 Row_format 这一列的值。
Row_format 的可能取值有: Fixed, Dynamic, Compressed, Redundant, Compact 等。
Dynamic ,代表行格式为动态行,行长度可变,说明表中存在varchar或text或Blob类型字段。
fixed ,代表固定行,是指行长度不变,说明表中都是int或har类型字段。执行效率高,不容易产生碎片。但char会导致占用固定长度的空间,长度不足时,会填补空格;
建议你可以换一个编码,修改表字段的不合理长度,太长的字段,建议使用TEXT或BLOB格式。
会出现这种情况是因为:这个问题可能与不同引擎之间使用的存储格式有关。MyISAM有3种行存储格式:fixed/dynamic/compressed。InnoDb在MyIASM基础上新引入了Barracuda。至于不同引擎的默认设置,以及各种存储格式之间的区别。
具体解决方法如下:
因为我们常用的是MyISAM引擎。
但是新装MySQL后,默认是InnoDb。
移除创建表时的ROW_FORMAT设置。
增加了Engine=MyISAM。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)