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

推薦する

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

vue+node+socket ioは複数人のインタラクションを実現し、プロセス全体を解放します

1. 背景1. フロントエンドはvue + vuex + socket.io-clientを使用しま...

AngularJSループオブジェクトプロパティで動的列を実装するアイデアの詳細な説明

動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...

Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...

Alibaba Cloud ホストが IP を使用して Web サイトにアクセスできない問題の解決策 (セキュリティ グループ ルールを構成することで解決)

Alibaba Cloud ホストを購入したばかりで、その速度を試すのが待ちきれませんでした。しか...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

MySQLのネクストキーロックのロック範囲についての簡単な説明

序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでし...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

HTML におけるメタの役割について (インターネットから収集および分類)

W3Cschoolではこのように説明しています<meta> 要素は、検索エンジン向けの説...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

Windows オペレーティング システムでポートの使用状況を照会およびクリアするプログラム

Windowsオペレーティングシステムでは、ポートの占有状況を照会し、ポートの占有状況をクリアするプ...

better-scrollプラグインのスライドできないバグについて(2021年プラグインで解決)

より良いスクロールの原則親コンテナーであるため、ラッパーの高さはコンテンツのサイズに応じて増加します...

js を使用して QR コードを生成するサンプル コード

以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...

Linux で ffmpeg をインストールするための詳細なチュートリアル

1. CentOS Linuxにffmpegをインストールする1.ダウンロードして解凍する http...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...