我将长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()。
实际上减少行长度,我错过了什么?
感谢您对此的见解。
更新: 请忽略我的问题,因为将压缩表的总大小与非压缩版本进行比较表明大小已显着减少。
答案 0 :(得分:1)
压缩适用于较低级别(页面和(或)Btree节点)。 LENGTH()
返回(未压缩的)字符串的实际长度。
您可以使用信息架构来了解有关良好压缩的效果。
进一步阅读