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ミラーに変更する方法

推薦する

CentOS 8.4 に Docker をインストールする詳細なチュートリアル

目次序文:システム要件:インストール環境:古いバージョンをアンインストールします: yum は具体的...

MySQLインデックスの詳細な分析

序文インデックスの選択はオプティマイザ段階の作業であることはわかっていますが、オプティマイザは万能で...

Ubuntu Server のターミナルのウェルカム メッセージで広告を無効にする方法

最新の Ubuntu Server バージョンを使用している場合、ようこそメッセージに、Ubuntu...

HTML での一般的なリダイレクト接続の例コード

コードをコピーコードは次のとおりです。 window.location.href="zcb...

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

MySQLデータベースが予期せずクラッシュし、テーブルデータファイルが破損して起動できなくなる問題を解決します。

問題: MySQL データベースが予期せずクラッシュしたため、データベースを起動できませんでした。エ...

MySQL のデータ型とスキーマの最適化の詳細な説明

現在、MySQL の最適化について学習しています。この記事では、データ型とスキーマの最適化について紹...

RedisとMySQLの違いを簡単に説明してください

MySQL はディスクに保存される永続的なストレージであり、取得には一定の IO が伴うことはご存じ...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

React Fiberの仕組みの詳細な説明

目次React Fiberとは何ですか?なぜReact Fiberなのか? React Fiberは...

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...

Windows での MySQL 5.7.18 のインストールと設定のチュートリアル

この記事では、WindowsでのMySQL 5.7.18のインストールと設定のチュートリアルを参考ま...

Vueデータ監視の原理の詳細な説明

目次1. はじめにII. 監視対象2.1 なぜオブジェクトを監視する必要があるのですか? 2.2 デ...

コンテンツウェブページの画像プレビューのデザイン

<br />以前、「コンテンツページ番号のプレビューナビゲーション」と「写真プレビューナ...

CSS 画像アニメーション効果のサンプルコード(フォトフレーム)

この記事では、CSS 画像アニメーション効果(フォトフレーム)のサンプルコードを紹介し、皆さんと共有...