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コンテナの起動とローカルへのマウントの詳細な説明

推薦する

電子メールの HTML ページを作成するための原則の概要

HTML メールはこのサイト上の独立したホスト ページではないため、他の誰かによってホストされていま...

MySQL PHP 構文の簡単な分析

まずcharAt関数の基本的な構文を見てみましょう文字 = str.charAt(インデックス) c...

MySQLの基本の共通機能

目次1. 共通機能分類1.1 単一行関数: 1.2 グループ化機能: 2. 単一行関数3. 数学関数...

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...

Linux ファイアウォールの状態確認方法の例

Linuxファイアウォールの状態を確認する方法1. 基本操作 # ファイアウォールのステータスを表示...

ブラウザの自動更新を実装するReactサンプルコード

目次フロントエンドルーティングとは何ですか?フロントエンドルーティングを実装するにはどうすればいいで...

プロジェクトの再構築からプロジェクトにおける CSS3 カスタム変数の使用について話す

CSS3変数について変数を宣言するときは、変数名の前に 2 つのハイフン ( -- ) を追加します...

Docker はキューとタスクのスケジューリングを実現するために Laravel アプリケーションをデプロイします

前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...

mysqlはルートユーザーと一般ユーザーを作成し、機能を変更および削除します。

方法1: SET PASSWORDコマンドを使用する mysql -u ルート mysql> ...

携帯電話番号が合法かどうかを判断するWeChatアプレットのサンプルコード

目次シナリオ効果コード要約するシナリオ登録ページに携帯電話番号を入力し、登録インターフェイスを要求す...

CentOS 7 はネットワークカードを変更した後、インターネットにアクセスできません

不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...

圧縮パッケージを使用して Linux 環境に JDK 13 をインストールする方法

JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...

Nginx プロキシ axios リクエストと注意事項

序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

IdeaでTomcatを起動したときに複数のリスナーが報告される問題を解決する

エラーのスクリーンショット例外が発生した場所が見つかりません。解決策: リソースディレクトリにlog...