MySQL根据列数据类型将表的行格式指定为固定或动态.如果表具有可变长度的列数据类型,例如TEXT或VARCHAR,则行格式是动态的;否则,它是固定的.
我的问题是,这两种行格式有什么区别?一个比另一个更有效率吗?
MySQL根据列数据类型将表的行格式指定为固定或动态.如果表具有可变长度的列数据类型,例如TEXT或VARCHAR,则行格式是动态的;否则,它是固定的.
我的问题是,这两种行格式有什么区别?一个比另一个更有效率吗?
这种差异实际上只对MyISAM重要,其他存储引擎并不关心这种差异.
对于具有固定宽度行的MyISAM,有几个优点:
无行碎片:对于可变宽度的行,可以在数据文件中将单行拆分为多个部分.这会增加磁盘搜索并降低操作速度.可以使用优化表对其进行碎片整理,但这并不总是可行的.
数据文件指针大小:在MyISAM中,有一个数据文件指针的概念,在需要引用数据文件时使用.例如,当索引引用行实际存在的位置时,会在索引中使用此选项.对于固定宽度的大小,该指针基于文件中的行偏移量(即,无论大小,行都是1、2、3).对于可变宽度,指针基于字节偏移量(即行可能是1、57、163).结果是,对于大型表,指针需要更大,这可能会给表增加更多开销.
更容易解决腐败问题.由于每一行的大小都相同,如果MyISAM表损坏,修复起来就容易得多,因此只会丢失实际损坏的数据.对于可变宽度,从理论上讲,可变宽度指针可能会出错,这可能会导致以错误的方式处理数据.
现在固定宽度的主要缺点是它浪费了更多的空间.例如,您需要使用CHAR字段而不是VARCHAR字段,因此最终会占用额外的空间.
通常情况下,您在格式上没有太多 Select ,因为它是基于模式指定的.然而,如果您只有几个varchar或一个blob/text来try 为此进行优化,这可能是值得的.例如,考虑将唯一的VARCHAR转换成字符,或者将BLUB拆分到它自己的表中.
您可以在以下网站上阅读更多关于此的信息: