MySQL ストレージエンジンの簡単な紹介

MySQL ストレージエンジンの簡単な紹介

1. MySQL アーキテクチャ

ストレージ エンジンを紹介する前に、まずは MySQL アーキテクチャを紹介し、ストレージ エンジンが MySQL システム全体のどこを占めるかを誰もが理解できるようにしましょう。次の図は公式のアーキテクチャ図です。

MySQL アーキテクチャ図

上の図からわかるように、MySQL は次の部分で構成されています。

  • 接続プールのコンポーネント
  • 管理サービスとツールのコンポーネント
  • SQL インターフェース コンポーネント
  • クエリアナライザのコンポーネント
  • オプティマイザーコンポーネント
  • キャッシュコンポーネント
  • プラグインストレージエンジン
  • 物理ファイル

MySQL データベースを他のデータベースと区別する最も重要な機能は、プラグイン テーブル ストレージ エンジンです。上の図からわかるように、MySql は多くの種類のストレージ エンジンをサポートしています。ストレージ エンジンはデータベースではなくテーブルに基づいていることに注意することが重要です。

2. MySql ストレージ エンジン

プラグイン ストレージ エンジンの利点は、特定のアプリケーションの特性に応じて異なるストレージ エンジンを選択できることです。以下は、MySQL でよく使用されるいくつかのストレージ エンジンです。

2.1 InnoDB ストレージ エンジン

InnoDB ストレージ エンジンはトランザクションをサポートし、主にオンライン トランザクション処理 (OLTP) アプリケーション向けに設計されています。その機能には、行ロック設計、外部キーのサポート、Oracle と同様の非ロック読み取りサポート (つまり、デフォルトの読み取り操作ではロックが生成されない) が含まれます。 MySQL データベース バージョン 5.5.8 以降では、InnoDB ストレージ エンジンがデフォルトのストレージ エンジンになります。

InnoDB は、マルチバージョン同時実行制御 (MVCC) を使用して高い同時実行性を実現し、4 つの SQL 標準分離レベルを実装します。デフォルトは REPEATABLE レベルです。同時に、ファントム リーディングを回避するために、次のキー ロックと呼ばれる戦略が使用されます。さらに、InnoDB ストレージ エンジンは、挿入バッファ、二重書き込み、アダプティブ ハッシュ インデックス、先読みなどの高パフォーマンスおよび高可用性機能も提供します。

テーブル内のデータの保存には、InnoDB ストレージ エンジンがクラスター化されたアプローチを使用するため、各テーブルのストレージは主キーの順序で保存されます。テーブルを定義するときに主キーを明示的に指定しない場合、InnoDB ストレージ エンジンは行ごとに 6 バイトの ROWID を生成し、それを主キーとして使用します。

2.2 MyISAM ストレージエンジン

MyISAM ストレージ エンジンはトランザクションやテーブル ロック設計をサポートしていませんが、フルテキスト インデックスをサポートしており、主に一部の OLAP データベース アプリケーションを対象としています。さらに、MyISAM ストレージ エンジンのもう 1 つのユニークな機能は、バッファー プールがデータ ファイルではなくインデックス ファイルのみをキャッシュすることです。これは、ほとんどのデータベースとは大きく異なります。 MySQL 5.0 以降、MyISAM はデフォルトで 256 TB の単一テーブル データをサポートしており、これは一般的なアプリケーション要件を満たすのに十分です。

2.3 メモリストレージエンジン

メモリ ストレージ エンジン (旧称 HEAP ストレージ エンジン) は、テーブル データをメモリに保存します。データベースが再起動されるかクラッシュすると、テーブル内のデータは消えてしまいます。一時データを格納する一時テーブルや、データ ウェアハウス内の緯度テーブルに適しています。メモリ ストレージ エンジンは、使い慣れた B+ ツリー インデックスの代わりに、デフォルトでハッシュ インデックスを使用します。

メモリ ストレージ エンジンは非常に高速ですが、使用に際しては一定の制限があります。たとえば、テーブル ロックのみがサポートされ、同時実行パフォーマンスが低く、TEXT および BLOB 列タイプはサポートされません。最も重要なのは、可変長フィールド (varchar) が固定長フィールド (char) と同じ方法で保存されるため、メモリが浪費されることです。

さらに、見落とされがちな点の 1 つは、MySQL データベースがクエリの中間結果セットを保存するためにメモリ ストレージ エンジンを一時テーブルとして使用することです。中間結果セットがメモリ ストレージ エンジン テーブルの容量設定よりも大きい場合、または中間結果に TEXT または BLOB 列タイプのフィールドが含まれている場合、MySQL データベースはそれを MyISAM ストレージ エンジン テーブルに変換し、ディスクに保存します。前述したように、MyISAM はデータ ファイルをキャッシュしないため、この時点で生成される一時テーブルのパフォーマンスはクエリに対して失われます。

2.4 アーカイブストレージエンジン

アーカイブ ストレージ エンジンは、INSERT および SELECT 操作のみをサポートし、MySQL 5.1 以降のインデックスをサポートします。アーカイブ ストレージ エンジンは、zlib アルゴリズムを使用してデータ行を圧縮し、最大 1:10 の圧縮率で保存します。名前が示すように、アーカイブ ストレージ エンジンは、ログ情報などのアーカイブされたデータを保存するのに適しています。アーカイブ ストレージ エンジンは、行ロックを使用して高同時挿入操作を実装しますが、トランザクション セーフ ストレージ エンジンではありません。その設計目標は、主に高速挿入および圧縮機能を提供することです。

もちろん、MySql は他の多くのストレージ エンジンもサポートしていますが、ここでは 1 つ 1 つリストされていません。

3. ストレージエンジンの比較

ストレージ エンジンはテーブルのストレージ構造として理解でき、各ストレージ エンジンは異なる機能をサポートします。 MySQL はプラグイン ストレージ エンジンをサポートしており、データ テーブルごとに異なるストレージ エンジンを指定できます。一般的に使用されるストレージ エンジンの特徴は次のとおりです。

次のコマンドを使用して、現在のデータベースがサポートしているストレージ エンジンを確認することもできます。

-- サポートされているストレージ エンジンを表示します。show engines;

以下は、最も一般的に使用される 3 つのストレージ エンジンの簡単な概要です。

  • InnoDB: MySQL のデフォルトのストレージ エンジン。トランザクション、行レベル ロックとテーブル レベル ロック、さまざまなインデックス、外部キーをサポートします。MySQL の上位バージョンではフルテキスト インデックスもサポートされますが、バッチ データ挿入の効率は低くなります。
  • MyISAM: データ挿入効率とデータクエリ速度が高く、フルテキストインデックスをサポートしていますが、データベーストランザクションや行レベルのロックはサポートされておらず、テーブルレベルのロックのみをサポートしています。
  • メモリ: このストレージ エンジンを使用すると、テーブル内のデータがメモリにロードされ、クエリは非常に高速になりますが、メモリ要件は高くなります。

したがって、デフォルトのストレージ エンジン (INNODB) を盲目的に選択するのではなく、アプリケーションの特定のニーズに応じて適切なストレージ エンジンを選択する必要があります。

コミット、ロールバック、リカバリに対するトランザクションの安全性 (ACID 準拠) 機能を提供し、同時実行制御が必要な場合は、InnoDB が適切な選択肢です。データ テーブルが主にレコードの挿入とクエリに使用される場合、MyISAM エンジンはより高い処理効率を提供します。一時的にデータを保存するだけでよく、データ量が多くなく、高いデータセキュリティが要求されない場合は、メモリ内の MEMORY エンジンにデータを保存することを選択できます。MySQL は、このエンジンを一時テーブルとして使用して、クエリの中間結果を保存します。 INSERT および SELECT 操作のみの場合は、アーカイブ エンジンを選択できます。アーカイブ ストレージ エンジンは、高同時挿入操作をサポートしますが、トランザクション セーフではありません。アーカイブ ストレージ エンジンは、アーカイブされたデータの保存に非常に適しています。たとえば、アーカイブ エンジンを使用してログ情報を記録できます。

4. 参考文献

MySQL テクニカル インサイダー

上記はMySQLストレージエンジンの詳細についての簡単な紹介です。MySQLストレージエンジンの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL メモリ ストレージ エンジンの簡単な分析
  • MySQLのストレージエンジンの詳細な説明
  • MySQLは適切なストレージエンジンを選択します
  • MySQLのストレージエンジンについてお話しましょう
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要
  • MySQL InnoDB ストレージ エンジンの詳細
  • MySQL共通ストレージエンジンの機能と使用方法の詳細な説明
  • MySQL ベースのストレージエンジンとログの説明 (包括的な説明)
  • MySQL ストレージ エンジンの概要
  • MySQLストレージエンジンのMyISAMとInnoDBの違いを詳しく説明
  • MySQLメモリストレージエンジンに関する知識

<<:  Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

>>:  docker nginxコンテナの起動とローカルへのマウントの詳細な説明

推薦する

MySQL マルチテーブルクエリの詳細な説明

よく食べて十分に休息を取るというのは簡単なことのように思えますが、実際に実行するのはそれほど簡単では...

MySQLテーブルパーティショニングプログラムを変更する方法

MySQLテーブルパーティショニングプログラムを変更する方法1. サブテーブルの実装の原則は次のとお...

CSS シャドウアニメーションの最適化のヒント

このテクニックは、この記事から来ています - シルキーでスムーズなパフォーマンスでボックスシャドウを...

MySQL における悲観的ロックと楽観的ロック

リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...

ウェブデザインの仕事に応募する方法

<br />みなさんこんにちは!ここで皆さんとチャットできて光栄です! (*^__^*)...

JavaScript を使用してページに動的な検証コードを実装する例

導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

WeChatアプレットでラッキーホイールゲームを実装する方法

ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...

MySQLがクエリキャッシュをキャンセルした理由

MySQL には以前、クエリ キャッシュ (Query Cache) がありました。8.0 以降では...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...

JS ES6コーディング標準の詳細な説明

目次1. ブロックスコープ1.1. let は var を置き換える1.2. グローバル定数とスレッ...

MySQL5.6.31 winx64.zip インストールと設定のチュートリアル

#1. ダウンロード # #2. ローカルに解凍し、必要な構成のmy*.iniを変更します。 #3....

Linux テキスト検索コマンド find の詳細な使用方法

find コマンドは主にディレクトリやファイルを検索するために使用され、一致のために複数のパラメータ...

原因不明のMySqlサービス消失の解決策

原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...