MySQLは適切なストレージエンジンを選択します

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL のストレージ エンジンをどのように選択するかということです。MySQL は多くのストレージ エンジンをサポートしていますが、それらはどのようなもので、どのようにエレガントに使用すればよいのでしょうか。

エンジンを分割する理由

ファイル システムでは、MySQL は各データベース (スキーマとも呼ばれます) をデータ ディレクトリの下のサブディレクトリとして保存します。テーブルを作成すると、MySQL はテーブル定義を保存するために、データベース サブディレクトリにテーブルと同じ名前の .frm ファイルを作成します。たとえば、DebugTable という名前のテーブルを作成すると、MySQL はテーブル定義を DebugTable.frm ファイルに保存します。

MySQL はデータベースとテーブルの定義を保存するためにファイル システムのディレクトリとファイルを使用するため、大文字と小文字の区別はプラットフォームに依存します。 Windows システムでは、大文字と小文字は区別されませんが、Unix 系システムでは大文字と小文字が区別されます。異なるストレージ エンジンはデータとインデックスを異なる方法で保存しますが、テーブル定義は MySQL サービス レイヤー wk で均一に処理されます。

サポートエンジンを表示

MySQL でサポートされているエンジンを確認するには、次のコマンドを使用します。

エンジンを表示します。

結果は以下のとおりです(MySQLバージョン:Ver 8.0.19):

mysql> エンジンを表示します。
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| エンジン | サポート | コメント | トランザクション | XA | セーブポイント |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | フェデレーテッド MySQL ストレージ エンジン | NULL | NULL | NULL |
| メモリ | はい | ハッシュベース、メモリに保存、一時テーブルに便利 | いいえ | いいえ | いいえ |
| InnoDB | デフォルト | トランザクション、行レベルのロック、外部キーをサポート | はい | はい | はい |
| PERFORMANCE_SCHEMA | YES | パフォーマンス スキーマ | NO | NO | NO |
| MyISAM | はい | MyISAM ストレージ エンジン | いいえ | いいえ | いいえ |
| MRG_MYISAM | YES | 同一の MyISAM テーブルのコレクション | NO | NO | NO |
| BLACKHOLE | はい | /dev/null ストレージ エンジン (書き込んだものはすべて消えます) | いいえ | いいえ | いいえ |
| CSV | はい | CSV ストレージ エンジン | いいえ | いいえ | いいえ |
| アーカイブ | はい | アーカイブ ストレージ エンジン | いいえ | いいえ | いいえ |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
セット内の行数は 9 です (0.00 秒)

ストレージエンジンの分類

MySQL ストレージ エンジンは、MyISAM、InnoDB、Memory、Merge などに分類されます。サポートされているエンジンは上記の表に記載されていますが、最もよく使用されるエンジンは MyISAM と InnoDB です。上記のストレージ エンジンについては、次の表で比較します。

MyISAM と InnoDB の違い

2 つのタイプの主な違いは、InnoDB がトランザクションと外部キーおよび行レベルのロックをサポートしていることです。

  1. InnoDB はトランザクション ログを使用して、プログラムのクラッシュや予期しない終了によって発生したデータ エラーを回復できます。ただし、MyISAM でエラーが発生すると、インデックスを再構築したり、ハード ディスクに書き込まれなかったエラーを修正したりする前に、完全なスキャンを実行する必要があります。
  2. InnoDB の修復時間は一般的に固定ですが、MyISAM の修復時間はデータ量に比例します。
  3. 相対的に言えば、データ量が増えるにつれて、InnoDB の方が安定性が高くなります。
  4. MyISAM は読み取りキャッシュと書き込みキャッシュの管理をオペレーティング システムに依存する必要がありますが、InnoDB には独自の読み取りキャッシュと書き込みキャッシュの管理メカニズムがあります。 (InnoDB は変更されたデータ ページをオペレーティング システムにすぐには引き渡しません) そのため、場合によっては、InnoDB データ アクセスの方が MyISAM よりも効率的になります。
  5. InnoDB は現在、MyISAM が提供する圧縮および簡潔な行形式をサポートしていないため、ハードディスクとキャッシュを大量に使用します。
  6. 操作が ACID (トランザクション) と完全に互換性がある場合、InnoDB は複数の接続を自動的にマージしますが、各トランザクションは依然として少なくとも 1 回はハードディスクに書き込まれる必要があります。そのため、一部のハードディスクまたはディスク アレイでは、1 秒あたり 200 回のトランザクション処理制限が発生します。より高いパフォーマンスを実現し、トランザクションの整合性を維持するには、ディスク キャッシュとバッテリ バックアップを使用する必要があります。もちろん、InnoDB にはパフォーマンスへの影響が少ないモードもいくつか用意されていますが、これらのモードではトランザクションの整合性も低下します。 MyISAM にはこの問題はありませんが、これは MyISAM がより高度だからではなく、単にトランザクションをサポートしていないためです。

アプリケーションシナリオ

  • MyISAM は非トランザクション テーブルを管理します。高速な保存と取得、および全文検索機能を提供します。アプリケーションで大量の SELECT クエリを実行する必要がある場合は、MyISAM の方が適しています。
  • InnoDB はトランザクション処理アプリケーション用に設計されており、ACID トランザクションのサポートを含む多くの機能を備えています。アプリケーションで多数の INSERT または UPDATE 操作を実行する必要がある場合は、InnoDB を使用して、複数ユーザーの同時操作のパフォーマンスを向上させる必要があります。

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

以下もご興味があるかもしれません:
  • SQL Server の実行エンジンを使い始める
  • 一般的なMySQLストレージエンジンの長所と短所
  • MySQLデータベースエンジンをInnoDBに変更する
  • MySQLメモリストレージエンジンに関する知識
  • MySQLのストレージエンジンの詳細な説明
  • MySQLのストレージエンジンについてお話しましょう
  • MySQLでデータテーブルを作成するときにエンジンMyISAM/InnoDBを設定する
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • 独自のSQL実行エンジンを作成する方法

<<:  Linuxのdateコマンドの使用

>>:  ログインと登録機能を実現するjs

推薦する

HTML 特殊文字エンコーディング CSS3 コンテンツに関する簡単な説明:「私は特別なシンボルです」

プロジェクトで使用されている特殊文字とアイコンHTMLコードXML/HTML コードコンテンツをクリ...

Angularの単一プロジェクトを複数プロジェクトにアップグレードするプロセス全体

目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...

Vue モバイル開発で better-scroll を使用するときにクリック イベントが失敗する問題の解決策

最近、モバイル プロジェクトの開発方法を学ぶために vue を使用し、スクロールには better-...

Vueは画像のドラッグアンドドロップ機能を実装します

この記事の例では、画像のドラッグアンドドロップ機能を実現するためのVueの具体的なコードを参考までに...

ウェブページデザインのための4つの実践的なヒント

関連記事: Web コンテンツ ページを作成するための 9 つの実用的なヒント<br />...

時刻を保存するために適切な MySQL の datetime 型を選択する方法

データベースを構築してプログラムを書くとき、日付と時刻の使用は避けられません。データベースには、ti...

Linuxアカウントファイル制御管理の詳細な手順

Linux システムでは、ユーザーが手動で作成したさまざまなアカウントに加えて、システムまたはプログ...

Vue プロジェクトでよく使用されるツール機能の概要

目次序文1. カスタムフォーカスコマンド1. 方法1 2. 方法2 3. 方法3 2. 入力ボックス...

iframeノードの初期化の問題に関する議論

今日、ふとリッチテキストエディタの制作原理を見直してみようと思いました。それで、彼は何も言わずにそれ...

MySQL で binlog を使用する際のフォーマットの選択方法

目次1. binlogの3つのモード1.ステートメントレベルモード2. 行レベルモード3. 混合モー...

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

cobbler ベースの Linux システムを自動的にインストールする

1. コンポーネントをインストールする yum install epel-rpm-macros.no...

カラーブロックレポート効果の動的な表示を実現する HTML (サンプルコード)

HTMLカラーブロックを使用してデータを動的に表示する <スタイル タイプ="te...