我已经改变了" innodb_file_format"来自" Antelope"到" Barracuda" bcoz有以下原因。
在进行文件格式更改时,我选择" row_format" as"动态"。 这工作正常。
但是,我想改变" row_format"来自"动态"到"压缩"用于数据压缩。有人能告诉我吗
答案 0 :(得分:18)
使用DYNAMIC或COMPRESSED意味着InnoDB存储的varchar / text / blob字段完全不在页面中。但除了这些列,每列只计算20个字节,InnoDB行大小限制没有改变;它仍然限制在每行大约8000个字节。
InnoDB仅支持每列767字节的索引。您可以通过设置innodb_large_prefix=1
并使用DYNAMIC或COMPRESSED行格式来提高此3072字节。
使用COMPRESSED行格式不会使InnoDB支持更长的索引。
关于表现,这是“依赖于”的情况之一。压缩通常是存储大小和压缩和解压缩的CPU负载之间的权衡。确实,这需要更多的CPU来处理压缩数据,但您必须记住,数据库服务器通常在等待I / O并且有足够的CPU资源。
但并非总是如果 - 如果对缓冲池中的数据执行复杂查询,则CPU可能会受到I / O以上的限制。因此,它取决于许多因素,例如您的数据在RAM中的适合程度,运行的查询类型以及每秒查询的数量以及硬件规格。其他任何人都无法为您的服务器上的应用程序回答太多因素。你只需要测试它。
重新评论:
一种可能性是索引不适合缓冲池。如果索引搜索需要在每个SELECT查询期间加载页面并逐出页面,则性能会显着下降。 EXPLAIN分析无法告诉您索引是否适合缓冲池。
我不知道索引中有多少列或列的数据类型,但如果要索引长varchar列,则应考虑使用前缀索引(或减少列的长度)。
您还可以获得更多RAM并增加缓冲池的大小。
答案 1 :(得分:5)
COMPRESSED将压缩数据。文本将被压缩得非常好。我之前有几个表并使用过DYNAMIC,转移到COMPRESSED。
我使用MySQL 5.7
表:
与DYNAMIC相比,COMPRESSED使用的空间减少了80%。之前:80Gb,之后:16Gb 大量保存,而我不需要那么多数据。
其他表格并不那么引人注目,但保存了~50%,其中有一些文本字段。例如。另一个来自6.4Gb - > 3.1Gb,1.5M行。
我没有更改为COMPRESSED较小的表,这些表主要保存整数/位和类似的。这些表的空间已经很小,因此不需要为它们使用更多的CPU。