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