Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


15.2 MyISAM ストレージエンジン

MyISAM は古い (そしてすでに使用できない) ISAM ストレージエンジンに基づいていますが、多くの役に立つ拡張機能を持っています。

表 15.2 MyISAM ストレージエンジンの機能

ストレージの制限 256T バイト トランザクション いいえ ロック粒度 テーブル
MVCC いいえ 地理空間データ型のサポート はい 地理空間インデックスのサポート はい
B ツリーインデックス はい T ツリーインデックス いいえ ハッシュインデックス いいえ
全文検索インデックス はい クラスタ化されたインデックス いいえ データキャッシュ いいえ
インデックスキャッシュ はい 圧縮データ はい[a] 暗号化データ[b] はい
クラスタデータベースのサポート いいえ レプリケーションのサポート[c] はい 外部キーのサポート いいえ
バックアップ/ポイントインタイムリカバリ[d] はい クエリーキャッシュのサポート はい データディクショナリ向け更新統計 はい

[a] 圧縮された MyISAM テーブルがサポートされているのは、圧縮行フォーマットを使用している場合だけです。MyISAM で圧縮行フォーマットを使用するテーブルは、読み取り専用です。

[b] ストレージエンジン内ではなくサーバー内で (暗号化関数を使って) 実装されています。

[c] ストレージエンジン内ではなくサーバー内で実装されています。

[d] ストレージエンジン内ではなくサーバー内で実装されています。


MyISAM テーブルはディスク上に 3 つのファイルとして格納されます。そのファイル名はテーブル名で始まり、ファイルタイプを示す拡張子が付きます。.frm ファイルはテーブルフォーマットを格納します。データファイルには .MYD (MYData) 拡張子が付きます。インデックスファイルには .MYI (MYIndex) 拡張子が付きます。

MyISAM テーブルが必要であることを明示的に指定するには、ENGINE テーブルオプションで指定します。

CREATE TABLE t (i INT) ENGINE = MYISAM;

MySQL 5.6 では通常、InnoDB がデフォルトエンジンであるため、ENGINE を使用して MyISAM ストレージエンジンを指定する必要があります。

mysqlcheck クライアントか myisamchk ユーティリティーで MyISAM テーブルをチェックしたり修正したりできます。容量を節約するために myisampackを使って MyISAM テーブルを圧縮することもできます。セクション4.5.3「mysqlcheck — テーブル保守プログラム」セクション4.6.3「myisamchk — MyISAM テーブルメンテナンスユーティリティー」セクション4.6.5「myisampack — 圧縮された読み取り専用の MyISAM テーブルの生成」を参照してください。

MyISAM テーブルには次のような特徴があります。

  • すべてのデータ値は、下位バイトから順に格納されます。これにより、データマシンとオペレーティングシステムは依存しなくなります。バイナリポータビリティーのための唯一の要件は、2 の補数の符号付き整数と IEEE 浮動小数点フォーマットを使用することです。これらの要件は主流のマシンで幅広く使用されています。バイナリポータビリティーは、組み込みシステムには適用されない可能性があります。特別のプロセッサを使用している場合があるためです。

    下位バイトから順にデータを格納するため、大きな速度低下はありません。通常、テーブル行のバイトは整列しておらず、順番に未整列のバイトを読み込む処理は逆の順番に読み込む処理より時間がかかりません。また、カラム値をフェッチするサーバーのコードは、ほかのコードに比べて速度は重視されません。

  • インデックスを効率良く圧縮ができるため、すべての数値キー値は上位バイトから順に格納されます。

  • 大きなファイル (最大 63 ビットのファイル長) は、大きなファイルをサポートするファイルシステムとオペレーティングシステムでサポートされます。

  • MyISAM テーブルの行数は、(232)2 (1.844E+19) の制限があります。

  • 1 つの MyISAM テーブルの最大インデックス数は 64 です。

    1 つのインデックスの最大カラム数は 16 です。

  • 最大キー長は 1000 バイトです。これは、ソースを変更して再コンパイルしても変えることができます。キーが 250 バイトより長いと、キーのブロックサイズはデフォルト値の 1024 バイトより大きい値が使用されます。

  • ソートされた順番で行が挿入されたとき (AUTO_INCREMENT カラムを使用しているときと同様に)、上位のノードが 1 つのキーだけを含むように、インデックスツリーが分割されます。これにより、インデックスツリーの領域の利用率が向上します。

  • テーブルごとに 1 つの AUTO_INCREMENT カラムの内部処理がサポートされます。MyISAMINSERT 操作と UPDATE 操作でこのカラムを自動的に更新します。これにより、AUTO_INCREMENT カラムは速くなります (少なくとも 10 %)。シーケンスの一番上の値は、削除されると、再利用されません。(AUTO_INCREMENT カラムがマルチカラムインデックスの最後のカラムとして定義された場合、シーケンスの最上部から削除された値が再利用されます。)AUTO_INCREMENT 値は ALTER TABLEmyisamchk でリセットできます。

  • 動的サイズの行は、削除を更新および挿入と併用すると、フラグメント化がかなり減少します。これは、削除された隣接ブロックを自動的に結合し、次のブロックが削除されたときにブロックを拡張することで行われます。

  • MyISAM は同時挿入をサポートしています。テーブルのデータファイルの途中に空きブロックがなければ、ほかのスレッドがテーブルから読み取るのと同時に新しい行をそれに INSERT できます。行を削除した結果として、または動的長の行を現在の内容より多くのデータで更新した結果として、空きブロックが発生する可能性があります。すべての空きブロックが完全に使用されると (埋まると)、その後の挿入はふたたび並列になります。セクション8.10.3「同時挿入」を参照してください。

  • データファイルとインデックスファイルを異なる物理デバイス上の異なるディレクトリに置き、DATA DIRECTORY および INDEX DIRECTORY テーブルオプションを CREATE TABLE に付けて速度を上げることができます。セクション13.1.17「CREATE TABLE 構文」を参照してください。

  • BLOBTEXT カラムはインデックスを付けることができます。

  • インデックスを付けたカラムでは NULL 値が許可されます。これには、キー当たり 0 - 1 バイトが必要です。

  • 文字カラムごとに異なる文字セットを持つことができます。セクション10.1「文字セットのサポート」を参照してください。

  • MyISAM インデックスファイルの中に、テーブルが正しく閉じられたかどうかを表すフラグがあります。mysqld--myisam-recover-options オプションで起動された場合、MyISAM テーブルはいつ開かれたかが自動的に確認され、正しく閉じられていなかった場合は修復されます。

  • myisamchk--update-state オプションを付けて実行したかどうかをテーブルにマークします。myisamchk --fast はこのマークがないテーブルだけを確認します。

  • myisamchk --analyze はキー全体に対してするのと同様に、キーの一部分に対する統計データを格納します。

  • myisampackBLOBVARCHAR カラムを圧縮できます。

MyISAM は次のような機能もサポートしています。

  • 真の VARCHAR 型をサポートしています。VARCHAR カラムは 1 バイトか 2 バイトで格納される長さから始まります。

  • VARCHAR カラムを持つテーブルの行の長さは固定でも動的でもかまいません。

  • テーブル内の VARCHARCHAR カラムの長さの合計は、最大で 64K バイトになる場合があります。

  • 任意の長さの UNIQUE 制約。

追加のリソース


User Comments
Sign Up Login You must be logged in to post a comment.