在哪种情况下,mysql的innodb紧凑的row\u格式会比冗余的更快/更好?

6fe3ivhb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(350)

我看到了许多关于stackoverflow、dba和服务器故障的比较,但在具体情况下,是否使用 COMPACT 或者 REDUNDANT innodb的行格式
有没有哪种情况下,一些简单的表会有明确的性能提升?例如在一个简单的关系表中 user_roles 这将Map出一个 users 带有 roles 表,使用两个 integers 这会使磁盘上的行始终保持相同的大小吗?
如果这不是一个好的例子,有没有好的例子可以起到明显的作用?
谢谢!

yftpprvb

yftpprvb1#

COMPACT 存储字段长度时,格式稍微好一点。 REDUNDANT 存储每个字段的长度,即使它是固定大小的int。 COMPACT 但是,只存储可变长度字段的长度。
这对性能差异的影响非常小,以至于不必为格式操心。

vyswwuz2

vyswwuz22#

基督教青年会。
我敢肯定,在这种情况下,不可能简单地将模式分类为“使用该行格式,该模式会更好(更差)”。
你没有提到 DYNAMIC 或者 COMPRESSED ,在以后的版本中引入。让我来谈谈我对这四种格式的看法。。。
最好是看看您的代码是否利用了任何一种行格式。主要的区别在于处理 TEXT (等)列。 SELECT * 要求返回所有列,但如果指定除文本列以外的所有列,则查询可能会运行得更快,因为不需要提取行外列。
将列的前767字节包含在行的主要部分可能会提供一些加速。但这取决于你在做什么,只能使用文本的第一部分,以及是否有一个优化,以实际利用特定的情况。注:“前缀索引”(例如, INDEX my_text(44) )仅在少数情况下有用。) COMPRESSED 它的实用性值得怀疑——在缓冲池中同时包含压缩和未压缩的副本会带来很多开销。我很难想象一种情况下,压缩显然是更好的。压缩率通常只有2:1。普通文本压缩比为3:1。如果您有大的文本/blob字符串,我认为最好对选定的字符串进行客户端压缩(以减少网络带宽) TEXT 列并存储到 BLOBs .
如果一个表中只有两个整数,那么会有很多开销。看到了吗 SHOW TABLE STATUS ; 它可能会说平均行长可能是40字节。如果不包括 PRIMARY KEY .
此外,由于其他各种原因,除非表中有超过一百万行,否则很难看到“更快/更好”的差别。
底线:使用默认版本。别为这个决定而失眠。
对于性能,关注索引和查询公式。对于空间,请测试您的表并报告。请注意,“免费空间”有很多种口味,其中大多数都没有报道,所以如果你在餐桌上打喷嚏,尺码可能会改变。

相关问题