2006年02月23日

[MySQL]myisampackによる圧縮

MySQLメモ。

読み取り専用で良いDBは myisampack で圧縮することにより、
検索を高速化できます。
ついでに必要なディスク領域も小さくなります。

このmyisampack、使い方は若干の癖がありました。
圧縮手順は以下のとおりです。

 (1) myisampack %対象テーブルのファイルパス%(拡張子MYIは省略可能)
 (2) myisamchk -rq %対象テーブルのファイルパス%(拡張子MYIは省略可能)
 (3) mysqladmin -u %ユーザ名% -p flush-tables

(1)で、実際にデータが圧縮されます。
(2)で、インデックスを再作成します。これを忘れると、データが見れないようです。
(3)で、mysqlldが作成したテーブルを参照するようになります。

上記を見てのとおり、手動で行う場合は一つ一つテーブルを指定する必要があり、
膨大な数のテーブルを持つDBの場合、圧縮するのは一苦労です。
(私は自動で行う簡単なユーティリティをC#でこしらえて対応しました)

で、上記圧縮をしてしまうと冒頭で触れたとおり読み取り専用のDBになります。
一部データの修正(update, delete)を行いたい場合は、
一度圧縮を解除する必要があります。
以下のように myisamchk で圧縮解除できます。

 myisamchk --unpack %対象テーブルのファイルパス%(拡張子MYIは省略可能)

圧縮の効果ですが、数百MB〜1GB程で体感できるだけの効果を得られました。
利用用途は限定されますが、お勧めです。
(SQL文が下手くそなだけって噂もありますが・・・)


【参考文献(ページ)】
http://dev.mysql.com/doc/mysql/ja/myisampack.html
http://dev.mysql.com/doc/mysql/ja/insert-speed.html
http://naoya.dyndns.org/~naoya/mt/archives/001565.html
posted by てるとみ at 18:55| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/13653537
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック