ホームページ  >  記事  >  データベース  >  [MySQL] MySQL ストレージ エンジン

[MySQL] MySQL ストレージ エンジン

黄舟
黄舟オリジナル
2017-02-25 10:23:53949ブラウズ


テーブルを作成するとき、テーブルのストレージエンジンであるテーブルのタイプを指定できます。テーブルのストレージ エンジンは、データの保存方法とアクセス方法、およびトランザクションの保存方法を決定します。テーブルのストレージ エンジンは、SQL ステートメントの処理に必要なストレージ容量と速度に大きく影響します。ストレージ エンジンが異なれば特性も異なります。多くの複雑な SELECT ステートメントの処理に適したストレージ エンジンもあれば、高速な更新を実現するのに適したストレージ エンジンもあります。

InnoDB

InnoDB は、MySQL のデフォルトのトランザクション エンジンであり、最も重要で広く使用されているストレージ エンジンです。多数の短期間のトランザクションを処理するように設計されています。ほとんどの場合、短期間のトランザクションは正常に送信され、ロールバックされることはほとんどありません。 InnoDB のパフォーマンスと自動クラッシュ回復機能により、非トランザクション ストレージのニーズに人気があります。

他のストレージ エンジンを使用する特別な理由がない限り、InnoDB エンジンを優先する必要があります。 ————「高性能 MySQL」

  • InnoDB は、MVCC を使用して高い同時実行性をサポートし、4 つの標準分離レベルを実装します。デフォルトのレベルは REPEATABLE READ で、ギャップ ロック戦略によりファントム読み取りが防止されます。

  • InnoDB は、クラスター化インデックスに基づいて確立された

  • が外部キー制約をサポートしていることを意味します。

  • 列 AUTO_INCREMENT 属性の自動追加をサポートします。

  • 事務。 InnoDB ストレージ エンジンは、トランザクションをサポートする標準の MySQL ストレージ エンジンです。

  • インデックスを削除または追加するときにテーブルデータ全体をコピーする必要はありません。

InnoDB は、ディスクからデータを読み取る際の予測可能な先読み、メモリ内にハッシュ インデックスを自動的に作成して操作を高速化できる適応型ハッシュ インデックス、挿入バッファーを高速化できる挿入など、多くの内部最適化を行いました。

InnoDB テーブルはクラスター化インデックスに基づいて構築されます。 InnoDB のインデックス構造は他の MySQL エンジンとは大きく異なり、クラスター化インデックスは主キー クエリに対して高いパフォーマンスを発揮します。ただし、セカンダリ インデックスには主キー列が含まれている必要があるため、主キー列が大きい場合は、他のすべてのインデックスも大きくなります。したがって、テーブルに多数のインデックスがある場合は、主キーをできるだけ小さくする必要があります。

MyISAM

MyISAM は、全文インデックス作成、圧縮、空間関数 (GIS) などを含む多数の機能を提供しますが、MyISAM はトランザクションと行レベルのロックをサポートしておらず、サポートできないことは間違いありません。クラッシュ後に安全に回復します。 MySQL 5.1 以前のバージョンでは、MyISAM がデフォルトのストレージ エンジンでした。MySQL が長い間トランザクションをサポートしてきたにもかかわらず、多くの人々の概念では、MySQL は依然として非トランザクション データベースであるのはまさにこのエンジンのおかげです。

  • MyISAM は行ではなくテーブル全体をロックします。

  • 全文インデックス作成をサポートします。

  • 圧縮テーブルをサポートします。圧縮テーブルは変更できないため、ディスク領域の使用量を大幅に削減できるため、ディスク I/O 操作が減少し、クエリのパフォーマンスが向上します。

ストレージ

MyISAM は、テーブルを 2 つのファイル (データ ファイルとインデックス ファイル) に保存し、それぞれ .MYD と .MYI 拡張子を付けます。 MyISAM テーブルには動的行または静的行を含めることができます。 MySQL は、テーブル定義に基づいて使用する行フォーマットを決定します。
MySQL5.0 では、MyISAM テーブルに可変長の行がある場合、デフォルト構成では 256 TB のデータしか処理できません

機能

MySQL の初期のストレージ エンジンの 1 つとして、まだいくつかの機能があります。

ロックと同時実行 – テーブルロック

MyISAMは行ではなくテーブル全体をロックします。読み取り時には、読み取りが必要なすべてのテーブルに共有ロックが追加され、書き込み時にはテーブルに排他ロックが追加されます。ただし、テーブルに読み取りクエリがある間、新しいレコードをテーブルに挿入することもできます (同時挿入)。

修復

MyISAM テーブルの場合、MySQL は検査とメンテナンス操作を手動または自動で実行できますが、ここで説明する修復はトランザクション回復やクラッシュ回復とは異なる概念です。

インデックス機能

MyISAMテーブルの場合、BLOBやTEXTなどの長いフィールドでも最初の500文字に基づいてインデックスを作成できます。 MyISAM は、単語の分割に基づいて作成されたインデックスである全文インデックス作成もサポートしており、複雑なクエリをサポートできます。
インデックスキーの遅延更新
MyISAMテーブル作成時にDELAY_KEY_WRITEオプションが指定されている場合、各変更が完了しても変更されたインデックスデータはすぐにはディスクに書き込まれません。

MyISAM のパフォーマンス

MyISAM エンジンはシンプルになるように設計されており、データはコンパクトな形式で保存されるため、特定のシナリオではパフォーマンスが非常に優れています。ただし、テーブル ロックの存在はパフォーマンスに大きな影響を与えます。

アーカイブ エンジン

アーカイブ ストレージ エンジンは、INSERT と SELECT のみをサポートします。アーカイブ エンジンはすべての書き込みをキャッシュし、zlib を使用して挿入を圧縮するため、MyISAM テーブルよりも必要なディスク I/O が少なくなります。ただし、すべての SELECT クエリではテーブル全体のスキャンを実行する必要があります。したがって、アーカイブ テーブルは、データ分析のためにテーブル全体のスキャンが必要になることが多い、ログ記録およびデータ収集アプリケーションに適しています。

アーカイブ エンジンは行レベルのロックと専用バッファーをサポートしているため、高度な同時挿入を実現できます。アーカイブにより、テーブル内に存在するすべての行が返されるまで他の SELECT が実行されなくなり、その後クエリが開始されて一貫した読み取りが実現されます。さらに、完了するまで読み取り操作には表示されないバッチ挿入も実装さ​​れています。このメカニズムはトランザクションと MVCC の一部の機能を模倣していますが、アーカイブ エンジンはトランザクション エンジンではなく、高速挿入と圧縮用に最適化されたエンジンです。

CSV ストレージ エンジン

このエンジンは通常の CSV ファイルを MySQL テーブルとして処理できますが、このテーブルはインデックスをサポートしていません。 CSV ファイルを CSV ストレージ エンジンのデータ ディレクトリにコピーするだけで、MySQL にリストされているルールを使用して開いて使用できます。

メモリ エンジン

データに迅速にアクセスする必要があり、再起動後にデータが変更されたり失われたりしない場合は、メモリ テーブルを使用すると非常に便利です。メモリ テーブルは、すべてのデータがメモリに保存され、ディスク I/O 操作が必要ないため、MyISAM テーブルよりも 1 桁高速です。再起動後もメモリ テーブルの構造は保持されますが、データは失われます。

  • ハッシュインデックスをサポートしているため、検索操作は非常に高速です。

  • はテーブルレベルのロックであるため、同時書き込みパフォーマンスは低くなります。

  • はBLOB型やTEXT型のカラムをサポートしておらず、各行の長さは固定です。varcharを指定しても実際のストレージではcharに変換されます。

説明

InnoDB にはない機能を使用する必要があり、それを置き換える他に方法がない場合を除き、InnoDB エンジンである「高性能 MySQL」を優先する必要があります

さらに、上記にリストされているのはほんの一部です。私たちがよく目にするストレージ エンジンは包括的なものではありません。

テーブルを作成するとき、テーブルのストレージエンジンであるテーブルのタイプを指定できます。テーブルのストレージ エンジンは、データの保存方法とアクセス方法、およびトランザクションの保存方法を決定します。テーブルのストレージ エンジンは、SQL ステートメントの処理に必要なストレージ容量と速度に大きく影響します。ストレージ エンジンが異なれば特性も異なります。多くの複雑な SELECT ステートメントの処理に適したストレージ エンジンもあれば、高速な更新を実現するのに適したストレージ エンジンもあります。

InnoDB

InnoDB は、MySQL のデフォルトのトランザクション エンジンであり、最も重要で広く使用されているストレージ エンジンです。多数の短期間のトランザクションを処理するように設計されています。ほとんどの場合、短期間のトランザクションは正常に送信され、ロールバックされることはほとんどありません。 InnoDB のパフォーマンスと自動クラッシュ回復機能により、非トランザクション ストレージのニーズに人気があります。

他のストレージ エンジンを使用する特別な理由がない限り、InnoDB エンジンを優先する必要があります。 ————「高性能 MySQL」

  • InnoDB は、MVCC を使用して高い同時実行性をサポートし、4 つの標準分離レベルを実装します。デフォルトのレベルは REPEATABLE READ で、ギャップ ロック戦略によりファントム読み取りが防止されます。

  • InnoDB は、クラスター化インデックスに基づいて確立された

  • が外部キー制約をサポートしていることを意味します。

  • 列 AUTO_INCREMENT 属性の自動追加をサポートします。

  • 事務。 InnoDB ストレージ エンジンは、トランザクションをサポートする標準の MySQL ストレージ エンジンです。

  • インデックスを削除または追加するときにテーブルデータ全体をコピーする必要はありません。

InnoDB は、ディスクからデータを読み取る際の予測可能な先読み、メモリ内にハッシュ インデックスを自動的に作成して操作を高速化できる適応型ハッシュ インデックス、挿入バッファーを高速化できる挿入など、多くの内部最適化を行いました。

InnoDB テーブルはクラスター化インデックスに基づいて構築されます。 InnoDB のインデックス構造は他の MySQL エンジンとは大きく異なり、クラスター化インデックスは主キー クエリに対して高いパフォーマンスを発揮します。ただし、セカンダリ インデックスには主キー列が含まれている必要があるため、主キー列が大きい場合は、他のすべてのインデックスも大きくなります。したがって、テーブルに多数のインデックスがある場合は、主キーをできるだけ小さくする必要があります。

MyISAM

MyISAM は、全文インデックス作成、圧縮、空間関数 (GIS) などを含む多数の機能を提供しますが、MyISAM はトランザクションと行レベルのロックをサポートしておらず、サポートできないことは間違いありません。クラッシュ後に安全に回復します。 MySQL 5.1 以前のバージョンでは、MyISAM がデフォルトのストレージ エンジンでした。MySQL が長い間トランザクションをサポートしてきたにもかかわらず、多くの人々の概念では、MySQL は依然として非トランザクション データベースであるのはまさにこのエンジンのおかげです。

  • MyISAM は行ではなくテーブル全体をロックします。

  • 全文インデックス作成をサポートします。

  • 圧縮テーブルをサポートします。圧縮テーブルは変更できないため、ディスク領域の使用量を大幅に削減できるため、ディスク I/O 操作が減少し、クエリのパフォーマンスが向上します。

ストレージ

MyISAM は、テーブルを 2 つのファイル (データ ファイルとインデックス ファイル) に保存し、それぞれ .MYD と .MYI 拡張子を付けます。 MyISAM テーブルには動的行または静的行を含めることができます。 MySQL は、テーブル定義に基づいて使用する行フォーマットを決定します。
MySQL5.0 では、MyISAM テーブルに可変長の行がある場合、デフォルト構成では 256 TB のデータしか処理できません

機能

MySQL の初期のストレージ エンジンの 1 つとして、まだいくつかの機能があります。

ロックと同時実行 – テーブルロック

MyISAMは行ではなくテーブル全体をロックします。読み取り時には、読み取りが必要なすべてのテーブルに共有ロックが追加され、書き込み時にはテーブルに排他ロックが追加されます。ただし、テーブルに読み取りクエリがある間、新しいレコードをテーブルに挿入することもできます (同時挿入)。

修復

MyISAM テーブルの場合、MySQL は検査とメンテナンス操作を手動または自動で実行できますが、ここで説明する修復はトランザクション回復やクラッシュ回復とは異なる概念です。

インデックス機能

MyISAMテーブルの場合、BLOBやTEXTなどの長いフィールドでも最初の500文字に基づいてインデックスを作成できます。 MyISAM は、単語の分割に基づいて作成されたインデックスである全文インデックス作成もサポートしており、複雑なクエリをサポートできます。
インデックスキーの遅延更新
MyISAMテーブル作成時にDELAY_KEY_WRITEオプションが指定されている場合、各変更が完了しても変更されたインデックスデータはすぐにはディスクに書き込まれません。

MyISAM のパフォーマンス

MyISAM エンジンはシンプルになるように設計されており、データはコンパクトな形式で保存されるため、特定のシナリオではパフォーマンスが非常に優れています。ただし、テーブル ロックの存在はパフォーマンスに大きな影響を与えます。

アーカイブ エンジン

アーカイブ ストレージ エンジンは、INSERT と SELECT のみをサポートします。アーカイブ エンジンはすべての書き込みをキャッシュし、zlib を使用して挿入を圧縮するため、MyISAM テーブルよりも必要なディスク I/O が少なくなります。ただし、すべての SELECT クエリではテーブル全体のスキャンを実行する必要があります。したがって、アーカイブ テーブルは、データ分析のためにテーブル全体のスキャンが必要になることが多いログおよびデータ収集アプリケーションに適しています。

アーカイブ エンジンは行レベルのロックと専用バッファーをサポートしているため、高度な同時挿入を実現できます。アーカイブにより、テーブル内に存在するすべての行が返されるまで他の SELECT が実行されなくなり、その後クエリが開始されて一貫した読み取りが実現されます。さらに、完了するまで読み取り操作には表示されないバッチ挿入も実装さ​​れています。このメカニズムはトランザクションと MVCC の一部の機能を模倣していますが、アーカイブ エンジンはトランザクション エンジンではなく、高速挿入と圧縮用に最適化されたエンジンです。

CSV ストレージ エンジン

このエンジンは通常の CSV ファイルを MySQL テーブルとして処理できますが、このテーブルはインデックスをサポートしていません。 CSV ファイルを CSV ストレージ エンジンのデータ ディレクトリにコピーするだけで、MySQL にリストされているルールを使用して開いて使用できます。

メモリ エンジン

データに素早くアクセスする必要があり、再起動後にデータが変更されたり失われたりしない場合は、メモリ テーブルを使用すると非常に便利です。メモリ テーブルは、すべてのデータがメモリに保存され、ディスク I/O 操作が必要ないため、MyISAM テーブルよりも 1 桁高速です。再起動後もメモリ テーブルの構造は保持されますが、データは失われます。

  • ハッシュインデックスをサポートしているため、検索操作は非常に高速です。

  • はテーブルレベルのロックであるため、同時書き込みパフォーマンスは低くなります。

  • はBLOB型やTEXT型のカラムをサポートしておらず、各行の長さは固定です。varcharを指定しても実際のストレージではcharに変換されます。

説明

InnoDB にはない機能を使用する必要があり、それを置き換える他の方法がない場合を除き、InnoDB エンジンである「高性能 MySQL」を優先する必要があります

さらに、上記にリストされているのはほんの一部です。私たちがよく目にするストレージ エンジンは包括的なものではありません。

上記は [MySQL] MySQL ストレージ エンジンの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。