myisampack は MyISAM
        テーブルの圧縮に、pack_isam は ISAM
        テーブルの圧縮に使用します。ISAM
        テーブルは廃止されているため、ここでは
        myisampack
        に限って話を進めますが、myisampack
        について説明することはすべて、pack_isam
        にも当てはまります。
      
        myisampack
        は、テーブル内の各カラムを個別に圧縮します。テーブルを開いたとき、カラムを展開するための情報がメモリに読み込まれます。これにより、個々のレコードにアクセスする際のパフォーマンスが向上します。この場合、Stacker
        を MS-DOS
        で使用するときのような大きなディスクブロックではなく、1
        つのレコードだけを解凍するだけで済みます。
        通常、myisampack
        はデータファイルを 40% 〜 70% 圧縮します。
      
        MySQL
        は、圧縮テーブルでメモリマッピング(mmap())を使用し、mmap()
        が機能しない場合は、通常のファイルの読み取り/書き込み使用法に戻ります。
      
以下に注意してください。
パック後、テーブルは読み取り専用になる。これは、CD にパックされたテーブルへのアクセスなど、読み取り専用でいいとの判断からそうしているものである。パックされたテーブルへの書き込み機能の実現も開発計画には入っているが、優先順位は高くない。
            myisampack は、BLOB
            カラムまたは TEXT
            カラムもパックできる。 古い
            pack_isam(ISAM
            テーブル用)ではパックできない。
          
        myisampack
        は以下のコマンドで起動します。
      
shell> myisampack [options] filename ...
        各ファイル名は、インデックス(.MYI)ファイル名になっていることが必要です。データディレクトリがカレントディレクトリでなければ、ファイルのパスを指定してください。.MYI
        拡張子は省略可能です。
      
        myisampack
        は、以下のオプションをサポートします。
      
            -b, --backup
          
            テーブルのバックアップを
            tbl_name.OLD として作成する。
          
            -#, --debug=debug_options
          
            デバッグログを出力する。debug_options
            文字列には、'd:t:o,filename'
            がよく使用される。
          
            -f, --force
          
            テーブルが大きくなってしまう場合、テンポラリファイルが存在する場合でもテーブルのパックを強制する。myisampack
            は、テーブルの圧縮中、tbl_name.TMD
            という名前のテンポラリファイルを生成する。myisampack
            を強制終了した場合、.TMD
            ファイルが削除されない場合がある。通常、tbl_name.TMD
            があれば、myisampack
            はエラーを出力して終了する。--force
            を使用すると、テンポラリファイルの有無に関わらず
            myisampack
            はテーブルをパックする。
          
            -?, --help
          
ヘルプメッセージを表示して終了する。
            -j big_tbl_name, --join=big_tbl_name
          
            コマンドラインで指定されたすべてのテーブルを結合して
            1 つのテーブル big_tbl_name
            にする。結合するテーブルはすべて、同一(同じカラム名、同じ型、同じインデックスなど)のテーブルであることが必要である。
          
            -p #, --packlength=#
          
            レコード長保存サイズをバイト単位で指定する。値は
            1、2、または 3
            であることが必要。myisampack
            は、すべてのレコードを 1、2、または 3
            バイトの長さポインタで保存する。ほとんどの場合、myisampack
            はファイルをパックする前に、正しい長さを判断できるが、パック中にさらに短くてもよいことを認識する場合がある。この場合、myisampack
            は、次回同じファイルをパックするときに、レコード長を短くできるというメモを出力する。
          
            -s, --silent
          
サイレントモード。エラー発生時のみ出力する。
            -t, --test
          
実際にはテーブルをパックせず、パックテストのみ実行する。
            -T dir_name, --tmp_dir=dir_name
          
テンポラリテーブルを書き込むディレクトリを指定する。
            -v, --verbose
          
冗長モード。パックの進捗および結果に関する情報を出力する。
            -V, --version
          
バージョン情報を表示して終了する。
            -w, --wait
          
            テーブルが使用中の場合、待機して再試行する。mysqld
            サーバが --skip-external-locking
            オプションで起動しいる場合、パッキングプロセス中にテーブルが更新される可能性があれば、myisampack
            を使用すべきではない。
          
以下のコマンドシーケンスは、一般的なテーブル圧縮を示しています。
shell>ls -l station.*-rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell>myisamchk -dvv stationMyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-02-02 3:06:43 Data records: 1192 Deleted blocks: 0 Datafile: Parts: 1192 Deleted data: 0 Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2 Max datafile length: 54657023 Max keyfile length: 33554431 Recordlength: 834 Record format: Fixed length table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 1024 1024 1 2 32 30 multip. text 10240 1024 1 Field Start Length Type 1 1 1 2 2 4 3 6 4 4 10 1 5 11 20 6 31 1 7 32 30 8 62 35 9 97 35 10 132 35 11 167 4 12 171 16 13 187 35 14 222 4 15 226 16 16 242 20 17 262 20 18 282 20 19 302 30 20 332 4 21 336 4 22 340 1 23 341 8 24 349 8 25 357 8 26 365 2 27 367 2 28 369 4 29 373 4 30 377 1 31 378 2 32 380 8 33 388 4 34 392 4 35 396 4 36 400 4 37 404 1 38 405 4 39 409 4 40 413 4 41 417 4 42 421 4 43 425 4 44 429 20 45 449 30 46 479 1 47 480 1 48 481 79 49 560 79 50 639 79 51 718 79 52 797 8 53 805 1 54 806 1 55 807 20 56 827 4 57 831 4 shell>myisampack station.MYICompressing station.MYI: (1192 records) - Calculating statistics normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11 pre-space: 0 end-space: 12 table-lookups: 5 zero: 7 Original trees: 57 After join: 17 - Compressing file 87.14% shell>ls -l station.*-rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell>myisamchk -dvv stationMyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-04-17 19:04:26 Data records: 1192 Deleted blocks: 0 Datafile: Parts: 1192 Deleted data: 0 Datafilepointer (bytes): 3 Keyfile pointer (bytes): 1 Max datafile length: 16777215 Max keyfile length: 131071 Recordlength: 834 Record format: Compressed table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 10240 1024 1 2 32 30 multip. text 54272 1024 1 Field Start Length Type Huff tree Bits 1 1 1 constant 1 0 2 2 4 zerofill(1) 2 9 3 6 4 no zeros, zerofill(1) 2 9 4 10 1 3 9 5 11 20 table-lookup 4 0 6 31 1 3 9 7 32 30 no endspace, not_always 5 9 8 62 35 no endspace, not_always, no empty 6 9 9 97 35 no empty 7 9 10 132 35 no endspace, not_always, no empty 6 9 11 167 4 zerofill(1) 2 9 12 171 16 no endspace, not_always, no empty 5 9 13 187 35 no endspace, not_always, no empty 6 9 14 222 4 zerofill(1) 2 9 15 226 16 no endspace, not_always, no empty 5 9 16 242 20 no endspace, not_always 8 9 17 262 20 no endspace, no empty 8 9 18 282 20 no endspace, no empty 5 9 19 302 30 no endspace, no empty 6 9 20 332 4 always zero 2 9 21 336 4 always zero 2 9 22 340 1 3 9 23 341 8 table-lookup 9 0 24 349 8 table-lookup 10 0 25 357 8 always zero 2 9 26 365 2 2 9 27 367 2 no zeros, zerofill(1) 2 9 28 369 4 no zeros, zerofill(1) 2 9 29 373 4 table-lookup 11 0 30 377 1 3 9 31 378 2 no zeros, zerofill(1) 2 9 32 380 8 no zeros 2 9 33 388 4 always zero 2 9 34 392 4 table-lookup 12 0 35 396 4 no zeros, zerofill(1) 13 9 36 400 4 no zeros, zerofill(1) 2 9 37 404 1 2 9 38 405 4 no zeros 2 9 39 409 4 always zero 2 9 40 413 4 no zeros 2 9 41 417 4 always zero 2 9 42 421 4 no zeros 2 9 43 425 4 always zero 2 9 44 429 20 no empty 3 9 45 449 30 no empty 3 9 46 479 1 14 4 47 480 1 14 4 48 481 79 no endspace, no empty 15 9 49 560 79 no empty 2 9 50 639 79 no empty 2 9 51 718 79 no endspace 16 9 52 797 8 no empty 2 9 53 805 1 17 1 54 806 1 3 9 55 807 20 no empty 3 9 56 827 4 no zeros, zerofill(2) 2 9 57 831 4 no zeros, zerofill(1) 2 9
        以下、myisampack
        によって出力される情報について説明します。
      
            normal
          
パックが使用されなかったカラムの数。
            empty-space
          
値が空白スペースのみのカラムの数。これらは 1 ビットになる。
            empty-zero
          
値がバイナリの 0 のみのカラムの数。これらは 1 ビットになる。
            empty-fill
          
            整数カラムで、その型の全バイト範囲を占めていないカラムの数。これらは、より小さな型に変換される(たとえば、INTEGER
            カラムを MEDIUMINT
            に変更する)。
          
            pre-space
          
数値カラムのうち、値の先頭に空白スペースがあるカラムの数。この場合、各値には先頭スペースのカウントが含まれる。
            end-space
          
末尾に空白スペースがあるカラムの数。この場合、各値には末尾スペースのカウントが含まれる。
            table-lookup
          
            カラムに複数の値が少ししかなく、ハフマン圧縮の前に
            ENUM に変換された。
          
            zero
          
すべての値がゼロであるカラムの数。
            Original trees
          
ハフマンツリーの初期番号。
            After join
          
領域を節約するためにツリーを結合した後に残った、独立したハフマンツリーの数。
        テーブルが圧縮された後で myisamchk
        -dvv
        を実行すると、各フィールドについての以下の追加情報が出力されます。
      
            Type
          
フィールド型には以下の記述子が入る。
                constant
              
すべてのレコードが同じ値。
                no endspace
              
エンドスペースを保存しない。
                no endspace, not_always
              
エンドスペースを保存せず、すべての値でエンドスペース圧縮を実行しない。
                no endspace, no empty
              
エンドスペースを保存しない。空白値を保存しない。
                table-lookup
              
                カラムが ENUM
                に変換された。
              
                zerofill(n)
              
                値内の最も重要な n
                バイトは常に 0 なので、保存しない。
              
                no zeros
              
ゼロを保存しない。
                always zero
              
0 値を 1 ビットで保存する。
            Huff tree
          
フィールドに関連付けられているハフマンツリー。
            Bits
          
ハフマンツリーで使用されているビット数。
        pack_isam または
        myisampack
        を実行後、isamchk または
        myisamchk
        を実行してインデックスを再生成する必要があります。このとき、MySQL
        オプティマイザの効率性を上げるために、インデックスブロックをソートし、統計を作成しておくこともできます。
      
myisamchk -rq --analyze --sort-index table_name.MYI isamchk -rq --analyze --sort-index table_name.ISM
        パックされたテーブルを MySQL
        データベースディレクトリにインストールした後、mysqladmin
        flush-tables
        を実行して、mysqld
        が新しいテーブルを使用して起動するようにしてください。
      
        パックされたテーブルをアンパックするには、--unpack
        オプションで isamchk または
        myisamchk を実行します。
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

