脚踏实地、勇往直前!
全部博文(1005)
分类: Mysql/postgreSQL
2014-08-20 11:01:25
Myisam引擎支持对表的压缩,压缩后的空间上比压缩前会减少60%-70%,但是压缩后的表是只读的,这个要注意,根据使用场景判断是否需要压缩,下面是一个压缩的例子.
1.压缩前前的情况
[mysql@node2 hxl]$ ls -al tb_dic_class_myisam*
-rw-r----- 1 mysql mysql 8694 08-15 10:39 tb_dic_class_myisam.frm
-rw-r----- 1 mysql mysql 31599964 08-20 10:08 tb_dic_class_myisam.MYD
-rw-r----- 1 mysql mysql 34070528 08-20 10:08 tb_dic_class_myisam.MYI
2.进行压缩
[mysql@node2 ~]$ myisampack /var/lib/mysqldata/hxl/tb_dic_class_myisam.MYI
Compressing /var/lib/mysqldata/hxl/tb_dic_class_myisam.MYD: (1000000 records)
- Calculating statistics
- Compressing file
65.94%
Remember to run myisamchk -rq on compressed tables
3.压缩后表的情况
[mysql@node2 hxl]$ ls -al tb_dic_class_myisam*
-rw-r----- 1 mysql mysql 8694 08-15 10:39 tb_dic_class_myisam.frm
-rw-r----- 1 mysql mysql 10762034 08-20 10:08 tb_dic_class_myisam.MYD
-rw-r----- 1 mysql mysql 1024 08-20 10:38 tb_dic_class_myisam.MYI
从压缩前后可以发现,压缩后表占空间明显减少了,达到了空间释放的目的,但是压缩后表变成只读的了
mysql> INSERT INTO tb_dic_class_myisam(class_id,class_name) VALUES(99,'99class');
ERROR 1036 (HY000): Table 'tb_dic_class_myisam' is read only
4.压缩后需要对该表进行检查
[mysql@node2 ~]$ myisamchk -rq /var/lib/mysqldata/hxl/tb_dic_class_myisam.MYI
- check record delete-chain
- recovering (with sort) MyISAM-table '/var/lib/mysqldata/hxl/tb_dic_class_myisam.MYI'
Data records: 1000000
- Fixing index 1
- Fixing index 2
5.解压缩表
可以使用--unpack参数解压缩表,但是解压缩后的表依然是只读的.
[mysql@node2 ~]$ myisamchk --unpack /var/lib/mysqldata/hxl/tb_dic_class_myisam.MYI
- recovering (with sort) MyISAM-table '/var/lib/mysqldata/hxl/tb_dic_class_myisam.MYI'
Data records: 1000000
- Fixing index 1
- Fixing index 2
-- The End --