無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 13 ストレージエンジンとテーブルタイプ :: 13.4 MyISAM ストレージエンジン
« 13.3 ストレージエンジンの設定

13.4.1 MyISAM スタートアップオプション »
Section Navigation      [Toggle]
  • 13 ストレージエンジンとテーブルタイプ
  • 13.1 MySQLストレージエンジンアーキテクチャの概要
  • 13.2 サポートされたストレージエンジン
  • 13.3 ストレージエンジンの設定
  • 13.4 MyISAM ストレージエンジン
    • 13.4.1 MyISAM スタートアップオプション
    • 13.4.2 キーに必要な領域
    • 13.4.3 MyISAM テーブルストレージフォーマット
    • 13.4.4 MyISAM テーブルの問題点
  • 13.5 InnoDB ストレージ エンジン
  • 13.6 MERGE ストレージエンジン
  • 13.7 MEMORY (HEAP) ストレージエンジン
  • 13.8 EXAMPLE ストレージエンジン
  • 13.9 FEDERATED ストレージエンジン
  • 13.10 ARCHIVE ストレージエンジン
  • 13.11 CSV ストレージエンジン
  • 13.12 BLACKHOLE ストレージエンジン

13.4. MyISAM ストレージエンジン

[+/-]

13.4.1. MyISAM スタートアップオプション
13.4.2. キーに必要な領域
13.4.3. MyISAM テーブルストレージフォーマット
13.4.4. MyISAM テーブルの問題点

MyISAM はデフォルトストレージエンジンです。古い ISAM コードに基づいていますが、便利な拡張子を多く持っています。(MySQL 5.1 は ISAMをサポート しない 事を覚えておいてください。)

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

MyISAMテーブルが必要だという事を明確に指示したい場合は、ENGINE テーブルオプションを指定します。

CREATE TABLE t (i INT) ENGINE = MYISAM;

通常、MyISAM ストレージエンジンを指示するのにENGINEを使用する必要はありません。変更されない限り、MyISAM がデフォルトエンジンです。デフォルトが変更されている可能性がある場合に MyISAM を確実に利用する為には、ENGINEオプションを確実に包括してください。

mysqlcheck クライアントか myisamchk ユーティリティでMyISAM テーブルをチェックしたり、修正したりする事ができます。容量を節約する為にmyisampackを使って MyISAM テーブルを圧縮できます。項7.11. 「mysqlcheck ? テーブル メンテナンスと修復プログラム」、項4.9.4.1. 「myisamchk でクラッシュ リカバリ」、項7.6. 「myisampack ? 圧縮された、読み取り専用MyISAM テーブルを作成する。」を参照して下さい。

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

  • 全てのデータ値は最初は下位バイトで格納されます。その為、データマシーンとOSは独立します。バイナリポータビリティに対する唯一の条件は、マシンが2個の補数符号付の整数とIEEE浮動小数点フォーマットを使用するという事だけです。これらの条件は主流マシンの間で広く利用されています。バイナリ互換性は、固有のプロセッサを持つ事がある内蔵システムには適合しない可能性があります。

    データを最初に下位バイトで格納する事に関して、スピードに関する重大なペナルティはありません。テーブル行内のバイトは通常非同盟であり、非同盟バイトを順番に読み込むのは、逆の順番で読み込むよりも少し手間がかかります。また、カラム値をフェッチするサーバー内のコードは、他のコードに比べるとタイムクリティカルではありません。

  • 全ての数値キー値は、よりよいインデックス圧縮の為に、上位バイトの物から先に格納されます。

  • 大きいファイル (最高63-bitファイル) は、専用のファイルシステムとOSによってサポートされています。

  • MyISAMテーブルには232 (~4.295E+09) 行の制限があります。MySQLを --with-big-tables オプションで作成すると、行の制限を (232)2 (1.844E+19) 行に増加させる事ができます。詳しくは項2.9.2. 「典型的な configure オプション」を参照してください。MySQL 5.0.4バージョンより、全ての標準バイナリはこのオプションで作成されます。

  • 1つのMyISAM テーブルのインデックス数は最高64です。これは再コンパイルする事によって変更できます。MySQL 5.1.4から、1つのMyISAM テーブルに許可されているインデックス数の最高値が N の場合、--with-max-indexes=N オプションを使ってconfigureを呼び出す事によって体型を設定できるようになりました。N は128以下でなければいけません。MySQL 5.1.4以前のバージョンではソースを変える必要があります。

    各インデックスのカラム最高数は16です。

  • 最高キー長さは1000バイトです。これも、ソースを変えたり、再コンパイルする事によって変える事ができます。 キー長さが250バイト以上の場合は、デフォルトの1024バイトよりも大きいキーブロックサイズが使用されます。

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

  • 1つのテーブルに対する1つの AUTO_INCREMENT カラムの内部操作がサポートされます。MyISAM はINSERT と UPDATE 操作のカラムを自動的に更新します。そのおかげで AUTO_INCREMENT カラムは速くなります。 (最低10%)シーケンスの最上部の値が削除された後に再利用される事はありません。(AUTO_INCREMENT が複数カラムインデックスの最後のカラムとして定義された場合は、シーケンスの最上部から削除された値が再利用される事があります。)AUTO_INCREMENT 値は ALTER TABLE や myisamchkでリセットできます。

  • 動的サイズの行は、削除作業をアップデートと挿入でミックスした時には断片化される事が少なくなります。隣のブロックが削除された時に、隣接している削除されたブロックを自動的に一体化したり、ブロックを拡張したりする事でこれを行います。

  • もしテーブルのデータファイルの間に開いているブロックがなければ、他のスレッドが読み込みをしているのと同時に新しい行をINSERTする事ができます。(これらは並列挿入として知られています。)行を削除する事や、それ自体の現在の内容よりも多くのデータを持つ動的長さの行をアップデートする事によって、フリーブロックが生じます。全てのフリーブロックが使用された(記入された)時、その後の挿入は再度並列になります。詳しくは項6.3.3. 「同時挿入」を参照してください。

  • スピードを上げるためにDATA DIRECTORY と INDEX DIRECTORY テーブルオプションへのCREATE TABLEを使って、データファイルとインデックスファイルを別々のディレクトリに入れる事ができます。詳しくは項12.1.8. 「CREATE TABLE 構文」を参照してください。

  • BLOB と TEXT カラムはインデックスする事ができます。

  • NULL 値がインデックスカラムの中で許可されています。1つのキーに対して0?1 バイト使われます。

  • それぞれのキャラクタカラムは異なるキャラクタセットを持つ事ができます。詳しくは章?9. キャラクタセットサポートを参照してください。

  • MyISAM インデックスファイルの中に、テーブルが正しく閉じられたかどうかを表すフラグがあります。もしmysqld が --myisam-recover オプションで開かれると MyISAM テーブルは自動的にチェックされて、もし正しく閉じられてなかった時には修正されます。

  • myisamchk を--update-state オプションで実行すると、チェックしたテーブルにマークをつけます。myisamchk --fast はこのマークがないテーブルだけをチェックします。

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

  • myisampack は BLOB と VARCHAR カラムを圧縮する事ができます。

MyISAM は次のような特徴をサポートします。

  • 本物の VARCHAR タイプへのサポート; VARCHAR カラムは1バイトか2バイトで格納された長さから始まります。

  • VARCHAR カラムを持つテーブルの行の長さは固定、または動的になり得ます。

  • 1つのテーブル内の VARCHAR と CHAR カラム長さの合計は、最高で 64KBになるでしょう。

  • 任意長さ UNIQUE 制約。

追加情報

  • MyISAM ストレージエンジンを専門に扱うフォーラムがあります。http://forums.mysql.com/list.php?21。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.