我看到了很多关于Stackoverflow,DBA和Server Fault的比较,但是在具体情况下,无论是使用COMPACT
还是REDUNDANT
行格式与InnoDB相比,它实际上都不清楚
在某些情况下,某些简单的表格会有明显的性能提升吗?例如,在一个简单的关系表user_roles
,它将users
表与roles
表映射,使用两个integers
,总是在磁盘上行相同的大小?
如果这不是一个好例子,那么有很好的例子可以产生明显的区别吗?
谢谢!
qazxsw poi格式在存储字段长度方面略胜一筹。 qazxsw poi存储每个字段的长度,即使它是固定大小的INT。然而,COMPACT
只存储长度可变长度的字段。
IMO会对性能差异做出很小的贡献,以至于无法使用格式。
REDUNDANT
COMPACT
因人而异。
我很确定这是一种情况,即没有简单的模式分类,“这种模式会更好(更糟)使用那种行格式”。
你没有提到或,它们是在后来的版本中引入的。让我就所有4种格式发表意见......
最好是看看你的代码是否利用了任何行格式。主要区别与DYNAMIC
(etc)列的处理有关。 COMPRESSED
要求返回所有列,但如果指定除文本列之外的所有列,则查询可能会运行得更快,因为不需要获取行外列。
使行的主要部分中包含列的前767个字节可以提供一些加速。但这取决于你正在做什么只能使用文本的第一部分,以及是否有优化来实际利用特定情况。注意:“前缀索引”(例如,TEXT
)仅在少数情况下有用。)
SELECT *
具有可疑的实用程序 - 在buffer_pool中同时包含压缩和未压缩的副本会产生大量开销。我很难想象压缩显然更好的情况。压缩率通常只有2:1。普通文本压缩为3:1。如果您有大文本/ blob字符串,我认为最好对选定的INDEX my_text(44)
列进行客户端压缩(以减少网络带宽)并存储到COMPRESSED
中。
如果你的表中只有两个整数,那么会有很多开销。见TEXT
;它可能会说Avg_row_length可能是40个字节。如果不包括BLOBs
,甚至更多。
此外,由于各种其他因素,除非表格超过百万行,否则很难看到“更快/更好”的差异。
底线:使用您的版本的默认值。不要因为决定而失眠。
对于性能关注索引和查询的制定。对于空间,测试您的表并报告。请注意,“自由空间”有多种口味,其中大多数都没有在任何地方报告,因此如果你在桌子上打喷嚏,大小数字可能会改变。