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選項。
新聞熱點
疑難解答