myisampack工具可以压缩MyISAM表.MYIsampack分别压缩表中的每一列。通常,myisampack可以将数据文件压缩到40%-70%。
当以后使用表时,解压缩列需要的信息被读入内存。当访问具体的记录时性能会更好,因为你只需要解压缩一个记录。
MySQL使用mmap()对压缩的表进行内存映射。如果mmap()不工作,MySQL返回到普通读/写文件操作。
请注意:
如果用--skip-external-locking选项调用mysqld服务器,如果在压缩过程中表可能被更新,调用myisampack不是一个好注意。
表压缩后,它变为只读。这是故意的(例如当访问CD上的压缩的表时)。允许写入到压缩的表位于我们的TODO列表中,但优先级较低。
myisampack可以压缩BLOB或TEXT列。旧版本ISAM表的pack_isam程序不可以。
调用myisampack的方法:
shell> myisampack [options] filename ...
文件名应为索引(.MYI)文件的文件名。如果不在数据库目录,应指定文件的路径名。允许忽略.MYI扩展名。
myisampack支持下面的选项:
--help,-?
显示帮助消息并退出。
--backup,-b
使用tbl_name.OLD名备份表数据文件。
---debug[=debug_options],-# [debug_options]
写调试日志。debug_options字符串通常为'd:t:o,file_name'。
--force,-f
产生一个压缩的表,即使它比原始表大,或如果以前调用myisampack的中间文件存在。(myisampack压缩表时在数据库目录中创建一个名为tbl_name.TMD的中间文件。如果杀掉myisampack,.TMD文件会被删除)。通常情况,如果myisampack发现tbl_name.TMD存在则退出并提示错误。用--force,myisampack则一定压缩表。
-join=big_tbl_name,-j big_tbl_name
将命令行中的所有表联接为一个表big_tbl_name。将要连接的所有表必须有相等的结构(相同的列名和类型,相同的索引等等)。
--pack length=len,-p len
指定记录长度存储大小,以字节计。值应为1、2或者3。myisampack保存所有长度指针为1、2或者3字节的行。在大多数正常情况下,myisampack在开始压缩文件前可以确定准确的长度值,但在压缩过程中它可以提示它可能已经使用了一个短的长度。在这种情况下,myisampack输出一条提示,下次你压缩同一文件时,你可以使用更短的记录长度。
--silent,-s
沉默模式。只有发生错误时才写输出。
--test,-t
没有实际地压缩表,只是测试压缩。
--tmpdir=path,-T path
使用myisamchk创建临时文件的目录。
--verbose,-v
冗长模式。写压缩操作过程相关信息和其结果。
--version,-V
显示版本信息并退出。
--wait,-w
如果表正使用则等待并重试。如果用--skip-external-locking选项调用了mysqld服务器,如果在压缩过程中表可能被更新,调用myisampack不是一个好主意。
运行myisampack后,必须运行myisamchk以重新创建索引。此时,你也可以排序索引块并创建MySQL优化器需要的统计信息以更有效地工作:
shell> myisamchk -rq --sort-index --analyze tbl_name.MYI
将压缩的表安装到MySQL数据库目录中后,应执行mysqladmin flush-tables以强制mysqld使用新的表。
要想解压缩一个压缩的表,使用myisamchk或isamchk的--unpack选项。
新闻热点
疑难解答