MySQLのストレージエンジンについてお話しましょう

MySQLのストレージエンジンについてお話しましょう

基礎

リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジンによって異なるテーブル タイプが構築されます。

ストレージ エンジンの役割は、データ テーブルにデータを格納する方法、格納されたデータのインデックスを作成する方法、更新やクエリなどのテクノロジの実装をサポートする方法を指定することです。

Oracle や SqlServer などのデータベースでは、1 つのストレージ エンジンのみがサポートされているため、データ ストレージ管理メカニズムは同じです。MySQL は複数のストレージ エンジンを提供します。ユーザーは、さまざまなニーズに応じて、データ テーブルに異なるストレージ エンジンを選択できます。ユーザーは、ニーズに応じて独自のストレージ エンジンを作成することもできます。

たとえば、テキストファイルを処理する場合は txt タイプを使用し、画像を処理する場合は png タイプを使用できます。

ストレージエンジン

MySQL は複数のストレージ エンジンをサポートしています。サポートされているストレージ エンジンを表示するには、 show enginesコマンドを使用します。

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

マイSQL>

翻訳

InnoDB ストレージ エンジンは、MySQL のデフォルトのストレージ エンジンです。トランザクション操作をサポートし、主にオンライン トランザクション処理 (OLTP) アプリケーション向けに設計されています。

その機能には、行ロック設計、外部キーのサポート、および Oracle のような非ロック読み取りサポート (つまり、デフォルトの読み取り操作ではロックが生成されない) が含まれます。 InnoDB ストレージ エンジンは、データを論理テーブルスペースに配置します。この論理テーブルスペースは、InnoDB ストレージ エンジン自体によってブラック ボックスのように管理されます。

MySQL 4.1 (4.1 を含む) 以降では、各 InnoDB ストレージ エンジン テーブルを個別の ibd ファイルに保存できます。さらに、InnoDB ストレージ エンジンは、テーブルスペースを作成するために RAW デバイス (行ディスク) の使用をサポートしています。 InnoDB は、マルチバージョン同時実行制御 (MVCC) を使用して高い同時実行性を実現し、4 つの SQL 標準分離レベルを実装します。デフォルトは REPEATABLE レベルです。また、ファントム読み取りを回避するために、netx-key ロックと呼ばれる戦略も使用します。

さらに、InnoDB ストレージ エンジンは、挿入バッファ、二重書き込み、アダプティブ ハッシュ インデックス、先読みなどの高パフォーマンスおよび高可用性機能も提供します。 InnoDB ストレージ エンジンは、テーブルへのデータの保存にクラスター化アプローチを採用しています。各テーブルは主キーの順序で保存されます。テーブルの定義時に主キーが明示的に指定されていない場合、InnoDB ストレージ エンジンは各行に対して 6 バイトの行 ID (ROWID) を生成し、それを主キーとして使用します。 InnoDB ストレージ エンジンは、MySQL データベースで最も一般的に使用されているエンジンです。Facebook、Google、Yahoo などの企業による成功したアプリケーションは、InnoDB ストレージ エンジンが高可用性、高パフォーマンス、高スケーラビリティを備えていることを証明しています。基礎となる実装を習得して理解するには、時間と技術的な蓄積も必要です。

InnoDB ストレージ エンジンの動作原理、実装、およびアプリケーションについて詳しく知りたい場合は、「MySQL Technology Insider: InnoDB Storage Engine」という書籍を参照してください。

マイISAM

トランザクションやテーブル ロック設計はサポートされていませんが、フルテキスト インデックスはサポートされています。主に一部の OLAP データベース アプリケーションで使用され、MySQL 5.5.8 より前のバージョンではデフォルトのストレージ エンジンでした (Windows バージョンを除く)。データベース システムとファイル システムの大きな違いは、トランザクションのサポートです。MyISAM ストレージ エンジンはトランザクションをサポートしていません。

本質的には、これを理解するのは難しいことではありません。ユーザーはすべてのアプリケーションでトランザクションを必要としますか?データ ウェアハウスでは、ETL 操作がない場合でも、単純なレポート クエリにはトランザクション サポートが必要ですか?さらに、MyISAM ストレージ エンジンのもう 1 つのユニークな機能は、バッファー プールがデータ ファイルではなくインデックス ファイルのみをキャッシュすることです。これは、ほとんどのデータベースとは異なります。

NDB

2003 年、MySQL AB は Sony Ericsson から NDB ストレージ エンジンを買収しました。

NDB ストレージ エンジンは、Oracle の RAC クラスタに似たクラスタ ストレージ エンジンです。ただし、Oracle RAC の共有すべて構造とは異なり、その構造は共有なしクラスタ アーキテクチャであるため、より高いレベルの高可用性を提供できます。

NDB ストレージ エンジンの特徴は、すべてのデータがメモリに保存される (バージョン 5.1 以降では、インデックス以外のデータはディスクに保存可能) ため、主キーの検索が非常に高速になり、NDB データ ストレージ ノードをオンラインで追加してデータベースのパフォーマンスを線形に向上できることです。

NDB ストレージ エンジンは、可用性、パフォーマンス、拡張性に優れたデータベース クラスタ システムであり、OLTP データベース アプリケーション タイプも対象としていることがわかります。

メモリ

名前が示すように、メモリ ストレージ エンジンのデータはメモリに保存されます。

データベースが再起動またはクラッシュすると、テーブル内のデータは消えてしまいます。これは、OLTP データベース アプリケーションで一時データの一時テーブルを格納するのに非常に適しており、OLAP データベース アプリケーションのデータ ウェアハウスのディメンション テーブルとしても使用できます。

メモリ ストレージ エンジンは、使い慣れた B+ ツリー インデックスの代わりに、デフォルトでハッシュ インデックスを使用します。

インフォブライト

サードパーティのストレージ エンジン。

特徴としては、ストレージが行ではなく列に基づいているため、OLAP データベース アプリケーションに非常に適しています。

公式ウェブサイトは http://www.infobright.org/ で、分析のための成功したデータ ウェアハウスの事例が多数掲載されています。

NTSE

NetEase が社内使用のために開発したストレージ エンジン。

現在のバージョンではトランザクションはサポートされていませんが、圧縮や行レベルのキャッシュなどの機能が提供されています。メモリ指向のトランザクション サポートは近い将来に実装される予定です。

ブラックホール

ホール ストレージ エンジンは、マスター スレーブ レプリケーションの分散マスター ライブラリに適用できます。

構成エンジン

テーブルを作成して指定する

ストレージ エンジンを指定するには、テーブル作成ステートメントの後にengineキーワードを使用します。

テーブル table name (id int, name char) を作成します。engine = ストレージ エンジン (デフォルト innodb)。

以下は、メモリ ストレージ エンジンを使用して temp という名前の一時テーブルを作成します。

mysql> テーブル temp(id int) を作成します。engine=memory;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> show create table temp; # 作成情報を表示します+-------+--------------------------------------------------------------------------------------------------------+
| テーブル | テーブルの作成 |
+-------+----------------------------------------------------------------------------------------+
| temp | テーブル `temp` を作成します (
 `id` int(11) デフォルト NULL
) ENGINE=MEMORY デフォルト CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

マイSQL>

MySQL サービスがシャットダウンされると、メモリ内のデータはクリアされます。

ブラックホール ストレージ エンジンの特徴は、レコードがいくつ挿入されても、テーブルに格納されないことです。

構成の割り当て

設定ファイルでは、テーブルを作成するときにストレージ エンジンを指定することもできます。

[mysqld]
#新しいテーブルを作成するときに使用されるデフォルトのストレージエンジン default-storage-engine=INNODB

ファイル構造

ここでは、InnoDB を例に挙げます。まず、学生テーブルを作成し、そのファイル構造を表示します。

mysql> テーブル student(id int) を作成します。engine=innodb;
クエリは正常、影響を受けた行は 0 行 (0.02 秒) 

student.frmはフィールドやその他の情報などのテーブル構造を保存します

student.ibdはレコードやその他の情報などのテーブルデータを保存します。

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

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

<<:  vue3とvue2の利点の比較

>>:  Ubuntu 18.04 のsources.listをAlibabaまたはTsinghuaミラーに変更する方法

推薦する

今日は、珍しいけれど役に立つJSテクニックをいくつか紹介します

1. 戻るボタンhistory.back() を使用してブラウザの「戻る」ボタンを作成します。 &l...

HTML テキストフォーマットの簡単な例 (詳細な説明)

1. テキストの書式設定: この例では、HTML ファイル内のテキストを書式設定する方法を示します...

Docker MySQLコンテナデータベースへの変更が有効にならない問題を解決する

公式の MySQL イメージを使用するには、構成ファイル、DB データ ファイル ディレクトリなどの...

mysqlはタイムゾーン関連の問題を解決します

序文: MySQL を使用すると、時間の表示が正しくない、タイムゾーンが GMT+8 ゾーンにない、...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...

JavaScript で 24 以上の配列メソッドを手動で実装する

目次1. トラバーサルクラス1. 各2. 地図3. すべての4. いくつか5. フィルター6. 減ら...

Spring環境を構成するためのDocker-composeの手順

最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...

サブクエリ最適化における MySQL 選択の実装

以下のデモはMySQLバージョン5.7.27に基づいています。 1. MySQLサブクエリ最適化戦略...

UbuntuのVimにNERDTreeプラグインをインストールする詳細な手順

NERDTree は Vim 用のファイル システム ブラウザーです。このプラグインを使用すると、ユ...

Docker マルチステージビルドを使用してイメージサイズを縮小する方法

この記事では、Docker のマルチステージ ビルド機能を使用してイメージ サイズを大幅に削減する方...

MySQLのスロークエリの詳細な説明

MySQL操作情報のクエリ show status -- すべての MySQL 操作情報を表示します...

ミニプログラムカスタムタブバーコンポーネントのカプセル化

この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコード...

React 入門レベルの詳細なメモ

目次1. Reactの基本的な理解1. はじめに2. Reactの特徴3. Reactが効率的な理由...

パーソナライズされたクリエイティブなウェブサイトデザインの例 (30)

そこで、個性的なスタジオやフリーランスを表現する組み合わせを 30 個選びました。デザインを目立たせ...