3

我有一个相当大的 mysql 数据库表,其中一个字段是长文本,我希望在这个字段上使用压缩,这会导致磁盘空间减少吗?或者是否已经分配了存储空间,并且不会导致任何空间减少。存储引擎是innodb。

4

1 回答 1

4

InnoDB 压缩行格式有一些先决条件:

  1. innodb_file_format=Barracuda在您的 my.cnf 文件中。

  2. innodb_file_per_table在您的 my.cnf 文件中。压缩不适用于存储在中央表空间 (ibdata1) 中的表。

  3. 更改表格以使用压缩格式。

    ALTER TABLE MyTable ROW_FORMAT=COMPRESSED
    

那么表应该以压缩格式存储,它会占用更少的空间。
压缩率取决于您的数据。

注意:如果您有一个表存储在 ibdata1 中央表空间中,并且您将该表重组为 file-per-table,则 ibdata1 不会缩小! 缩小 ibdata1 的唯一方法是转储所有InnoDB 数据,关闭 MySQL,rm 表空间,重新启动 MySQL,然后重新加载数据。


回复您的评论:

不,它不应该改变您进行查询的方式。

是的,这将需要很长时间。多长时间取决于您的系统。我建议先用一张小桌子试一试,这样你就可以感受一下了。

写的时候压缩,读的时候解压,需要消耗一些CPU资源。数据库服务器拥有额外的 CPU 资源是很常见的——数据库通常受 I/O 的限制。但是速度可能会成为瓶颈。同样,这取决于您的系统、数据和使用情况。我鼓励您仔细测试,看看它是否是净赢。

于 2013-02-11T23:48:14.110 回答