我在Stackoverflow,DBA和Server Fault上看到了许多比较,但是对于在特定情况下的性能,无论是与InnoDB一起使用dotnet publish -c Debug -r win-arm
dotnet publish -c Release -r win-arm
或COMPACT
行格式,实际上还不清楚
在某些情况下,某些简单的表可以显着提高性能吗?例如,在一个简单的关系表REDUNDANT
中,该表将使用两个user_roles
映射一个users
表与一个roles
表,这两个行总是在磁盘上具有相同的大小吗?
如果那不是一个很好的例子,那么有没有很好的例子会产生明显的不同?
谢谢!
答案 0 :(得分:3)
COMPACT
格式在存储字段长度方面略胜一筹。 REDUNDANT
存储每个字段的长度,即使它是固定大小的INT。 COMPACT
仅存储可变长度字段的长度。
IMO对性能差异的贡献很小,以至于不必理会格式。
答案 1 :(得分:1)
YMMV。
我敢肯定,在这种情况下,无法将模式轻松分类为“使用行格式,此模式会更好(更糟)”。
您没有提到在更高版本中引入的DYNAMIC
或COMPRESSED
。让我对所有4种格式发表意见...
更好的办法是查看您的代码是否利用了任何行格式。主要区别与TEXT
(等)列的处理有关。 SELECT *
要求返回所有列,但是如果您指定除文本列之外的所有列,则查询可能的运行速度会快得多,因为行列不需要提取。
该行主要部分中包含的列的前767个字节 可能会提高速度。但这取决于您正在执行的操作,即仅使用文本的第一部分和是否有优化措施可以真正利用特定情况。注意:“前缀索引”(例如INDEX my_text(44)
)仅在少数情况下有用。
COMPRESSED
的用途可疑-在buffer_pool中同时包含压缩和未压缩的副本会涉及很多开销。我很难想象压缩的情况明显更好。压缩率通常仅为2:1。普通文本压缩为3:1。如果您的文本/ blob字符串很大,我认为最好对选定的TEXT
列进行客户端压缩(以减少网络带宽)并将其存储到BLOBs
中。
如果您的表中只有两个整数,则会有很多开销。参见SHOW TABLE STATUS
;它可能会说Avg_row_length可能是40个字节。甚至还不包括PRIMARY KEY
的话。
此外,由于其他各种原因,除非表已超过一百万行,否则很难看到“更快/更好”的差异。
底线:使用默认的版本。不要因决定而失眠。
为了获得性能,重点在于索引和查询的制定。对于 space ,测试您的表并进行报告。请注意,“自由空间”有多种形式,其中大多数都没有报告 ,因此,如果您在桌旁打喷嚏,尺寸大小可能会发生变化。