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

推薦する

JavaScriptカスタムオブジェクトメソッドの概要

目次1. オブジェクトを使用してオブジェクトを作成する2. コンストラクタを使用してオブジェクトを作...

CSS の inline-block の最小幅値の詳細な説明

序文最近、私は夜に時間を取って「CSS World」という本を読んでいます。この本は非常に興味深く、...

chkconfig および systemctl コマンドを使用して Linux サービスを有効または無効にする方法

これは Linux 管理者にとって重要な (そして素晴らしい) トピックなので、誰もが Linux ...

MySQL シリーズ データベース設計 3 つのパラダイム チュートリアルの例

目次1. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...

MySQL で乱数を生成し、文字列を連結する方法の例

この記事では、MySQL が乱数を生成し、文字列を連結する方法について例を使用して説明します。ご参考...

HTML ウェブページの段落レイアウトと改行

Web ページの外観はレイアウトに大きく左右されます。ページ内に長い段落のテキストがある場合、通常は...

HttpsページでBaiduシェアを使用するためのソリューション

サイト全体で https アクセスを有効にしてから、共有コードが利用できなくなり、有効になっていた小...

中国における中国語ドメイン名の人気は新たなクライマックスを迎えた

<br />外交部などの中央政府機関、各レベルの地方政府、その他の国家機関や部門が率先し...

MySQL 外部キー制約とテーブル関係の概要

目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...

Linuxでシンボリックリンクを削除(削除)するコマンド

Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...

MySQL最新バージョン8.0.17解凍版インストールチュートリアル

個人的にはインストール版よりも解凍版の方がインストールしやすいと思います。早速、解凍版のインストール...

スライドボタン効果を実現するネイティブJS

Jsで作ったスライドボタンの具体的なコードは参考までに。具体的な内容は以下のとおりですまずエフェク...

クエリでのMySQLのユニークキーの使用と関連する問題

1. テーブルステートメントを作成します。 テーブル「従業員」を作成します( `emp_no` in...

CentOS7 (YUM) での MySQL 5.7 のインストールと設定のチュートリアル

インストール環境: CentOS7 64ビット、MySQL5.7 1. YUMソースを設定するMyS...

CSS における要素の表示モード

CSS では、要素タグは、要素の表示モードの違いに応じて、インラインレベル要素とブロックレベル要素の...