在哪种情况下MySQL InnoDB COMPACT row_format会比REDUNDANT更快/更好?

问题描述 投票:1回答:2

我看到了很多关于Stackoverflow,DBA和Server Fault的比较,但是在具体情况下,无论是使用COMPACT还是REDUNDANT行格式与InnoDB相比,它实际上都不清楚

在某些情况下,某些简单的表格会有明显的性能提升吗?例如,在一个简单的关系表user_roles,它将users表与roles表映射,使用两个integers,总是在磁盘上行相同的大小?

如果这不是一个好例子,那么有很好的例子可以产生明显的区别吗?

谢谢!

mysql innodb
2个回答
3
投票

qazxsw poi格式在存储字段长度方面略胜一筹。 qazxsw poi存储每个字段的长度,即使它是固定大小的INT。然而,COMPACT只存储长度可变长度的字段。

IMO会对性能差异做出很小的贡献,以至于无法使用格式。

REDUNDANT COMPACT


1
投票

因人而异。

我很确定这是一种情况,即没有简单的模式分类,“这种模式会更好(更糟)使用那种行格式”。

你没有提到REDUNDANT formatCOMPACT format,它们是在后来的版本中引入的。让我就所有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,甚至更多。

此外,由于各种其他因素,除非表格超过百万行,否则很难看到“更快/更好”的差异。

底线:使用您的版本的默认值。不要因为决定而失眠。

对于性能关注索引和查询的制定。对于空间,测试您的表并报告。请注意,“自由空间”有多种口味,其中大多数都没有在任何地方报告,因此如果你在桌子上打喷嚏,大小数字可能会改变。

© www.soinside.com 2019 - 2024. All rights reserved.