MyISAM

MyISAMストレージエンジンとは



MyISAMは、MySQLリレーショナルデータベース管理システムで、かつて標準のストレージエンジンとして採用されていました。古いISAMコードを基盤とし、多くの便利な拡張が施されています。MySQL 5.5より前のバージョンではデフォルトのエンジンでしたが、5.5以降はInnoDBが標準となっています。

ファイルシステム



MyISAMでは、各テーブルは通常、3つのファイルとしてディスクに保存されます。これらのファイルは、テーブル名に拡張子を加えた形式で構成されます。

`.frm`ファイル: テーブルの定義情報を格納。MySQLデータベースの仕様の一部であり、MyISAMの仕様には含まれません。
`.MYD`ファイル: データファイル。実際のデータが格納されます。
`.MYI`ファイル: インデックスファイル。データの検索を高速化するためのインデックス情報が格納されます。インデックスファイルが破損した場合でも、再作成が可能です。

ファイルの形式は、`ROW_FORMAT`テーブルオプションによって異なります。以下の3つの形式が利用可能です。

`FIXED`: すべてのデータを固定長で格納します。読み取りが高速で、テーブルの修復も容易です。ただし、大きな可変長列(BLOBやTEXT型)が含まれるテーブルでは使用できません。
`DYNAMIC`: 可変長列のサイズは固定されません。ディスクスペースを節約できますが、読み取り速度は少し遅くなります。
`COMPRESSED`: 専用ツールを使用して作成する読み取り専用テーブルです。圧縮率が高くディスクスペースを大幅に節約できますが、作成に手間がかかります。

MyISAMファイルはシステムに依存せず、トランザクションをサポートしないため、異なるサーバー間でファイルをコピーして利用できます。

特徴



MyISAMは、読み取り操作が多く、書き込みが少ない環境に最適化されています。データウェアハウスのように、非常に大きなテーブルに対してクエリを発行し、テーブルの更新が夜間などデータベースが使用されていない時間帯に行われる場合に適しています。

MyISAMが高速な読み取りを実現できるのは、そのインデックス構造によるものです。各インデックスエントリは、データファイル内のレコードを指すポインタを持っており、このポインタはファイル先頭からのオフセット値で表されます。特に`FIXED`形式の場合、レコードの長さが固定されているため、高速な読み取りが可能です。また、挿入操作も簡単で、データファイルの最後に新しい行を追加するだけです。

一方、削除や更新操作には課題があります。削除の場合、行のオフセット値を変更しないために、削除されたスペースはそのまま残されます。更新の場合、行の長さが短くなれば空きスペースが残り、長くなれば行が断片化されます。空きスペースをなくし、断片化された行を整理するには、`OPTIMIZE TABLE`コマンドを実行する必要があります。MyISAMは仕組みが単純なため、インデックス統計が非常に正確です。

しかし、MyISAMの単純さには欠点も存在します。最も大きな課題はトランザクションをサポートしないことです。外部キーもサポートしていません。また、通常のユースケースでは、InnoDBの方がMyISAMよりも高速に動作する場合があります。

MySQL 5.5以降のバージョンでは、参照整合性の制約とより高い同時実行性を確保するため、InnoDBエンジンが標準となりました。

MyISAMは、FULLTEXTインデックス作成とOpenGISデータ型をサポートしています。

MariaDBでの実装



MariaDBは、Ariaと呼ばれるクラッシュに強いMyISAMの代替ストレージエンジンを使用しています。しかし、MariaDBの開発者もMyISAMの機能開発を継続しており、キーキャッシュのセグメント化機能を実装しました。この機能により、MyISAMインデックスのキャッシュがセグメントに分割され、スレッドがキャッシュ全体をロックする必要がなくなり、同時実行性が向上します。

MariaDBでは、MyISAMは仮想列もサポートしています。

DrizzleはMyISAMをサポートしていません。

まとめ



MyISAMは、MySQLにおいて歴史的に重要なストレージエンジンでしたが、トランザクションサポートの欠如など、いくつかの制約があります。現在では、InnoDBがより多くの状況で優れた選択肢となっています。しかし、MyISAMが持つ高速な読み取り性能は、特定の状況下では依然として有効です。

関連項目


MySQLデータベースエンジンの比較 (仮のURL)

外部リンク


MySQL Documentation on MyISAM Storage Engine
MyISAM's open files limit and table-cache problem explained (仮のURL)
Using MyISAM in production (仮のURL)
MySQL Engines - MyISAM vs Innodb by Rackspace (2015年2月8日にアーカイブ)
Convert your MySQL database from MyISAM to InnoDB, and get ready for Drupal 7 at the same time (2013年3月8日にアーカイブ)
* Converting Tables from MyISAM to InnoDB (仮のURL)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。