| マイISAM | |
|---|---|
| 開発者 | オラクル社 |
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | データベースエンジン |
| ライセンス | GNU一般公衆利用許諾契約書 |
| Webサイト | dev |
MyISAMは、2009年12月にリリースされたバージョン5.5より前のMySQLリレーショナルデータベース管理システムのデフォルトのストレージエンジンでした。[ 1 ]これは古いISAMコードに基づいていますが、多くの便利な拡張機能があります。
ファイルシステム
[編集]MyISAM テーブルは、パーティション化されていない場合、ディスク上に 3 つのファイルとして保存されます。ファイル名はテーブル名で始まり、ファイルの種類を示す拡張子が付きます。MySQL はテーブルの定義を保存するために .frm ファイルを使用しますが、このファイルは MyISAM エンジンの一部ではなく、サーバーの一部です。データファイルの拡張子は .MYD (MYData) です。インデックスファイルの拡張子は .MYI (MYIndex) です。インデックスファイルが失われた場合でも、インデックスを再作成することでいつでも再作成できます。
ファイル形式はROW_FORMATテーブルオプションによって異なります。以下の形式が利用可能です。
- FIXED: FIXEDは、すべてのデータ(可変長型を含む)が固定長になる形式です。この形式は読み取り速度が速く、破損したテーブルの修復効率も向上します。テーブルに大きな可変長列(BLOBまたはTEXT)が含まれている場合、FIXED形式は使用できません。
- DYNAMIC: 可変長列は固定長ではありません。この形式は読み取り速度が少し遅くなりますが、ディスク容量を節約できます。
- 圧縮:圧縮テーブルは、MySQLが動作していない状態で専用ツールを使って作成できます。圧縮テーブルは読み取り専用です。そのため通常は現実的ではありませんが、圧縮率は他の方法よりもかなり高くなります。
MyISAMファイルはシステムに依存しません。また、MyISAMはトランザクションベースではないため、その内容は現在のサーバーのワークロードに依存しません。そのため、異なるサーバー間でファイルをコピーすることが可能です。
特徴
[編集]MyISAMは、読み取り操作が多く、書き込み操作が少ない、あるいは全くない環境に最適化されています。MyISAMが適している典型的な用途はデータウェアハウスです。これは、非常に大きなテーブルに対するクエリが含まれ、そのようなテーブルの更新はデータベースが使用されていない時間(通常は夜間)に行われるためです。
MyISAM が高速な読み取りを可能にする理由は、そのインデックスの構造にあります。各エントリはデータ ファイル内のレコードを指し、ポインタはファイルの先頭からのオフセットです。このため、特に形式が FIXED の場合、レコードをすばやく読み取ることができます。したがって、行の長さは一定です。新しい行はデータ ファイルの末尾に追加されるため、挿入も簡単です。ただし、削除と更新の操作はより問題が多くなります。削除では空きスペースを残す必要があります。そうしないと、行のオフセットが変わってしまいます。更新でも同様で、行の長さが短くなるため、更新によって行が長くなると、行が断片化されます。行をデフラグして空きスペースを確保するには、OPTIMIZE TABLE コマンドを実行する必要があります。この単純なメカニズムのため、MyISAM インデックスの統計は通常非常に正確です。
しかし、MyISAMのシンプルさにはいくつかの欠点があります。MyISAMの大きな欠点は、トランザクションがサポートされていないことです。また、外部キーもサポートされていません。通常の使用状況では、InnoDBの方がMyISAMよりも高速であるようです。[ 2 ]
MySQL 5.5 以降のバージョンでは、参照整合性制約とより高い同時実行性を保証するためにInnoDBエンジンに切り替えられました。
MyISAM は FULLTEXT インデックス作成と OpenGIS データ型をサポートしています。
フォーク
[編集]MariaDBにはAriaと呼ばれるストレージエンジンがあり、「MyISAMのクラッシュセーフな代替」と評されています。[ 3 ]しかし、MariaDBの開発者は依然としてMyISAMのコードに取り組んでいます。主な改善点は「セグメント化キーキャッシュ」です。[ 4 ]これを有効にすると、MyISAMのインデックスキャッシュがセグメントに分割されます。これにより、スレッドがキャッシュ全体をロックする必要がほとんどなくなるため、同時実行性が向上します。
MariaDB では、MyISAM も仮想列をサポートしています。
Drizzle には MyISAM が含まれていません。
参照
[編集]注記
[編集]- ^ 「MySQL 5.5 リファレンスマニュアル :: 13 ストレージエンジン :: 13.6 InnoDB ストレージエンジン」 2009年5月10日。2010年11月20日時点のオリジナルよりアーカイブ。2021年3月16日閲覧。
- ^ 「MySQLパフォーマンス:5.6のInnoDBとMyISAMの比較」。2012年11月16日。 2021年3月16日閲覧。
- ^ 「Aria FAQ」 . MariaDB . 2010年8月15日. 2021年3月16日閲覧。
- ^ 「セグメント化キーキャッシュ」 . MariaDB . 2010年8月17日. 2021年3月16日閲覧。
外部リンク
[編集]- MyISAM ストレージエンジンに関する MySQL ドキュメント
- MyISAM のオープンファイル制限とテーブルキャッシュ問題の説明
- MyISAMの使用時に発生する問題についての記事
- MySQL エンジン - MyISAM vs Innodb by Rackspace (2015 年 2 月 8 日アーカイブ)
- MySQL データベースを MyISAM から InnoDB に変換し、同時に Drupal 7 の準備をしましょう(2013 年 3 月 8 日アーカイブ)
- MyISAM から InnoDB へのテーブル変換