如何使用InnoDB和ROW_FORMAT = COMPRESSED获取压缩数据

时间:2014-10-15 02:31:46

标签: mysql innodb

我将长json字符串存储在mysql表中,并使用:

创建了表
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 

还会为数据库返回以下设置:

innodb_file_format = Barracuda (SHOW VARIABLES LIKE 'innodb_file_per_table';)
innodb_file_per_table = ON (SHOW VARIABLES LIKE 'innodb_file_format';)

字段类型设置为mediumtext。

到目前为止,我认为我已经按照本书的每一步进行了操作。

但是,当数据插入表中时,行的平均长度没有变化。

SELECT AVG( LENGTH( json_field) ) FROM mytable

上面的命令仍会返回与切换到ROW_FORMAT = COMPRESSED之前相同的平均长度

我也使用标准的INSERT INTO mytable VALUES(...)命令,并且不对值使用COMPRESS()。

实际上减少行长度,我错过了什么?

感谢您对此的见解。

更新: 请忽略我的问题,因为将压缩表的总大小与非压缩版本进行比较表明大小已显着减少。

1 个答案:

答案 0 :(得分:1)

压缩适用于较低级别(页面和(或)Btree节点)。 LENGTH()返回(未压缩的)字符串的实际长度。

您可以使用信息架构来了解有关良好压缩的效果。

进一步阅读