Archiveエンジンの目的の1つは、ディスク上でのデータ格納量を低減することです。MySQLには類似の目的を実現する手段として、MyISAMエンジンのテーブル構成の中に圧縮テーブルというものがあります。そこで、このMyISAMエンジンの圧縮テーブルとArchiveテーブルを比較しようと思います。
まずは、それぞれのデータファイルのサイズを実際に簡単なテーブルを作成して比較します。
比較対象のテーブルとして、ArchiveエンジンとMyISAMエンジンそれぞれで同じ構成のテーブルを作成します。そして、LOAD文を使用して、それぞれのテーブルに10万件分のCSVファイルのデータをロードします。
次に示すのは、作成した「TEST00」テーブルの構成です。これで、同一件数のArchiveテーブルとMyISAMテーブルができあがります。ここで、それぞれのテーブルのデータファイルのサイズを取得します。データファイル名は、「TEST00.ARZ」と「TEST00.MYD」です。
TEST00テーブルの構成
`ADDR_ID` decimal(10,0) default NULL,
`ADDR_STREET1` char(40) default NULL,
`ADDR_STREET2` char(40) default NULL,
`ADDR_CITY` char(30) default NULL,
`ADDR_STATE` char(20) default NULL,
`ADDR_ZIP` char(10) default NULL,
`ADDR_CO_ID` decimal(4,0) default NULL
|
次に、10万件のレコードを格納したMyISAMテーブルを「myisampack」ユーティティを使用して圧縮テーブルに変更します。そして、再度MyISAMテーブルのデータファイルのサイズを取得します。
表3は、このようにして取得した3種類のデータファイルのサイズです。
ストレージエンジン |
データファイル名 |
サイズ(Byte) |
MyISAM |
標準 |
TEST00.MYD |
14,800,00 |
圧縮 |
TEST00.MYD |
7,087,828 |
Archive |
TEST00.ARZ |
8,022,820 |
表3:データファイルサイズの比較
今回の簡単な実験では、「MyISAM・圧縮テーブル<Archiveテーブル<MyISAM・標準テーブル」の順に、データファイルのサイズが小さくなりました。ただし、ArchiveテーブルとMyISAM・圧縮テーブルの差はわずかでした。
この結果は使用するデータにより圧縮度合いが異なるため、テーブル内に格納するデータの中身によっても変わってくると思います。少なくともArchiveテーブルは、MyISAM・圧縮テーブル並のディスク上でのデータ格納量低減効果があるといえます。
また、MyISAM・圧縮テーブルとArchiveテーブルの機能的な違いとしては、表4のようなものがあります。
ストレージ エンジン |
テーブル作成 |
テーブルへの処理 |
MyISAM/ 圧縮エンジン |
オフラインにてコマンドラインから「myisampack」ユーティティを使用して作成 |
読み込み専用 |
Archive テーブル |
SQL文のDDLのみで作成可能 |
読み込みとレコードの挿入が可能 |
表4:機能的な比較
このように、MyISAM/圧縮エンジンのテーブル作成の際は、別途ユーティリティを使用しなければならないのは非常に大きな差だと思います。
|