您的位置:首页 > 数据库 > MySQL

innodb表压缩

2016-05-22 17:21 531 查看
表压缩能提升性能,减少存储空间,主要是用在包含很多字符的表上,并且读要比写多的情况下,也就是在数据仓库的情况下应用居多

在使用表压缩的功能时候, innodb_file_per_table这个参数要启用,innodb_file_format这个参数设置成Barracuda,对比下看看效果

CREATE TABLE
compressed_tab
(

TABLE_CATALOG
varchar(512) NOT NULL DEFAULT ”,

TABLE_SCHEMA
varchar(64) NOT NULL DEFAULT ”,

TABLE_NAME
varchar(64) NOT NULL DEFAULT ”,

TABLE_TYPE
varchar(64) NOT NULL DEFAULT ”,

ENGINE
varchar(64) DEFAULT NULL,

VERSION
bigint(21) unsigned DEFAULT NULL,

ROW_FORMAT
varchar(10) DEFAULT NULL,

TABLE_ROWS
bigint(21) unsigned DEFAULT NULL,

AVG_ROW_LENGTH
bigint(21) unsigned DEFAULT NULL,

DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,

MAX_DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,

INDEX_LENGTH
bigint(21) unsigned DEFAULT NULL,

DATA_FREE
bigint(21) unsigned DEFAULT NULL,

AUTO_INCREMENT
bigint(21) unsigned DEFAULT NULL,

CREATE_TIME
datetime DEFAULT NULL,

UPDATE_TIME
datetime DEFAULT NULL,

CHECK_TIME
datetime DEFAULT NULL,

TABLE_COLLATION
varchar(32) DEFAULT NULL,

CHECKSUM
bigint(21) unsigned DEFAULT NULL,

CREATE_OPTIONS
varchar(255) DEFAULT NULL,

TABLE_COMMENT
varchar(2048) NOT NULL DEFAULT ”

)ROW_FORMAT=COMPRESSED

KEY_BLOCK_SIZE=8 ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into compressed_tab select * from uncompressed_tab;

查看ibd文件的大小



存储基本上是小了1半以上

mysql> select count(*) from compressed_tab;

+———-+

| count(*) |

+———-+

| 1693440 |

+———-+

1 row in set (5.02 sec)

mysql> select count(*) from uncompressed_tab;

+———-+

| count(*) |

+———-+

| 1693440 |

+———-+

1 row in set (6.63 sec)

查询同样数量大概少了近2秒,提升效果还是很明显的

可以使用innodb_compression_level 这个参数来控制压缩率,mysql使用了 LZ77算法来压缩数据,

In an InnoDB table, BLOB, VARCHAR, and TEXT columns that are not part of the primary key may be stored on separately allocated overflow pages. We refer to these columns as off-page columns. Their values are stored on singly-linked lists of overflow pages.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql-表压缩