在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC 有什么区别?

 

In MySQL InnoDB, what is the difference between COMPRESSED, COMPACT and DYNAMIC for ROW_FORMAT?

What are the benefits between each other?

在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC对于用户来说ROW_FORMAT?彼此之间有什么好处?

 

COMPACT is format supported by Antilope. It stores first 768 bytes of BLOB in case its value doesn't fit in page.

DYNAMIC is almost the same as COMPACT except only 20 bytes for each BLOB field is used. Benefits - more BLOB fields are possible in a record.

COMPRESSED is used for compressed tables. Hence its benefits.

COMPACT 的格式由 Antilope 支持。它存储前 768 个字节的 BLOB,以防其值不适合页面。

DYNAMIC 与 COMPACT 几乎相同,但每个 BLOB 字段仅使用 20 个字节。优势 - 记录中可能有更多的 BLOB 字段。

压缩用于压缩表。因此,它的好处。

 

 

使用 DYNAMIC 或压缩意味着 InnoDB 存储完全在页面外不合的页面中的 varchar/文本/blob 字段。但是,除了那些列(每个列只计数 20 个字节)以外的,InnoDB 行大小限制没有改变;它仍然限制在每行约 8000 个字节。

InnoDB 仅支持每列 767 字节的索引。您可以通过设置和使用动态或压缩行格式来提高此 3072 字节。innodb_large_prefix=1

使用压缩行格式不会使 InnoDB 支持更长的索引。

关于性能,这是"视情况而定"的情况之一。压缩通常是在存储大小和 CPU 负载之间权衡以压缩和取消压缩。的确,使用压缩数据需要多一些 CPU,但您必须记住,数据库服务器通常在等待 I/O,并且有 CPU 资源需要备用。

但并非总是 -- 如果对缓冲池中的数据进行复杂查询,则可能受 CPU 限制超过 I/O。因此,这取决于许多因素,例如数据在 RAM 中的拟合程度、运行的查询类型、秒查询数以及硬件规格。太多因素,其他人无法回答您的服务器上的应用程序。你只需要测试它。

重新评论:

一种可能性是索引不适合缓冲池。如果索引搜索需要在每次 SELECT 查询期间加载页面并逐出页面,则性能会显著降低。解释分析无法告诉您索引是否适合缓冲池。

我不知道索引中列的列数或数据类型,但如果对长 varchar 列编制索引,则应考虑使用前缀索引(或减少列的长度)。

您还可以获得更多 RAM 并增加缓冲池的大小。

 

 

COMPRESSED:将压缩数据。文本会压缩得很好。我有几个表, 以前用DYNAMIC, 移动到COMPRESSED。

我使用 Mysql 5.7

表:

  • id int
  • some_other_id (国际)
  • 文本(长文本)utf8mb4_unicode_ci 500KB/行平均值
  • updated_at (国际)
  • created_at (国际)

     

与动态相比,压缩占用的空间减少 80%。之前: 80gb 之后: 16gb巨大的保存, 而我不需要这么多的数据。

其他表并没那么戏夸张,但它保存了 +50%的地方有一些文本字段。例如,另一个从 6.4Gb -> 3.1Gb 与 1.5M 行。

我还没有更改为压缩较小的表,大多保存整数/位和类似。这些表的空间已经很小,因此无需为它们使用更多的 CPU。

 

总结来源:Internet

 

文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。

 

若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)

posted @ 2020-09-27 23:31  刘俊涛的博客  阅读(43)  评论(0编辑  收藏