MySQL ストレージ エンジンの基礎

MySQL ストレージ エンジンの基礎

前回の記事では、MySQL トランザクションについて説明しました。これで、MySQL トランザクションについて誰もが知っているはずです。トランザクションの ACID 原則を覚えていますか?覚えていない人は、「MySQL トランザクションの概要」を確認してください。実際、より正確には、MySQL InnoDB ストレージ エンジンです。MySQL では、InnoDB ストレージ エンジンのみがトランザクションをサポートしているためです。これを見て、友人の中には次のような疑問を持つ人もいるかもしれません。

ストレージ エンジンとは何ですか?

MySQL にはどのようなストレージ エンジンがありますか?

各ストレージエンジンの特徴と違いは何ですか?

次に、これらの質問を一つずつ見ていきましょう。

ストレージ エンジンとは何ですか?

簡単に言うと、MySQL はデータを保存するために使用されます。ストレージ エンジンは、ファイルを保存する方法とそれに付属する一連のツールと考えることができます。各ファイル保存方法の特性が、ストレージ エンジンの特性となります。

たとえば、メモリ ストレージ エンジンはデータをメモリに保存します。その利点は、読み取りと書き込みが高速であることです。ただし、データはディスクに永続化されず、失われやすいなどです。

MySQL のストレージ エンジン

MySQL 5.7 では、MySQL でサポートされているストレージ エンジンは次のとおりです。

翻訳

マイISAM

メモリ

CSVファイル

アーカイブ

ブラックホール

マージ:

フェデレーション

以下では、よく使われるストレージエンジンのみ紹介します。紹介されていない他のストレージエンジンに興味がある場合は、自分で検索することができます。

InnoDB: トランザクション操作 (開始、コミット、ロールバック コマンドなど) をサポートし、行レベルのロックをサポートします。テーブル ロックと比較すると、行レベルのロックは粒度が細かく、同時実行性が向上します。ここには多くの詳細があります。次回は別の記事を書きます) は、外部キー参照整合性制約をサポートします。 InnoDB ストレージ エンジンは、MySQL バージョン 5.7 のデフォルトのストレージ エンジンでもあります。欠点は、多くのストレージスペースを占有することです。

MyISAM: このストレージ エンジンは InnoDB ストレージ エンジンよりも占有スペースがはるかに少ないですが、テーブル ロックのみをサポートし、同時実行パフォーマンスがはるかに低く、トランザクションをサポートしていません。通常は読み取り専用アプリケーションでのみ使用されます。これは MySQL のオリジナルのストレージ エンジンです。

メモリ: このストレージ エンジンの最大の特徴は、すべてのデータがメモリに保存されることです。以前は「ヒープ」と呼ばれていました。
アプリケーション シナリオ: 主に、すぐにアクセスする必要がある、重要でないデータを保存します。なぜ重要なデータではないのでしょうか?すべてのデータがメモリに保存されるという理由だけで、安全ではないと解釈されることもあります。

CSV: まず、CSV について理解しましょう。CSV ファイルは、実際にはカンマで区切られたテキスト ファイルです。データ変換によく使用されます。このタイプはほとんど使用されず、インデックスをサポートしていません。

アーカイブ: アーカイブ ファイル。主に、あまり使用されない参照ファイルを保存するために使用されます。

例: このストレージ エンジンは主に、ストレージ エンジンを自分で作成する方法を示すために使用され、通常、実稼働環境では使用されません。

ストレージエンジンの選択方法

上記の比較から、InnoDB ストレージ エンジンがトランザクション、外部キー、行レベルのロックをサポートしていることがわかるはずです。オンライントランザクション処理を必要とするアプリケーションに最適です。ストレージ エンジンを選択する際、特別な理由がない場合は、ストレージ エンジンとして InnoDB を選択することをお勧めします。

1. テーブルを作成するときにストレージ エンジンを指定できます。指定しない場合は、デフォルトのストレージ エンジンが使用されます。

テーブル t_base_user を作成します(
oid bigint(20) NULLでない主キー auto_increment コメント "",
created_at 日時 null コメント ''
)エンジン=innodb

2. (方法1) テーブルのストレージエンジンを表示する

mysql> "t_base_user" のようなテーブルステータスを表示します \G;
************************** 1. 行 ****************************
    名前: t_base_user
   エンジン: InnoDB
   バージョン: 10
 行形式: 動的
    行数: 0
平均行長: 0
 データ長: 16384
最大データ長: 0
インデックスの長さ: 0
  データ空き容量: 0
自動増分: 1
 作成時間: 2017-12-17 20:10:24
 更新時間: NULL
 チェック時間: NULL
  照合順序: utf8_unicode_ci
  チェックサム: NULL
作成オプション: 
   コメント: 
セット内の1行(0.01秒)

3. (方法2) テーブルのストレージエンジン情報を表示する

mysql> show テーブル t_base_user\G を作成します。
************************** 1. 行 ****************************
  テーブル: t_base_user
テーブルの作成: CREATE TABLE `t_base_user` (
`oid` bigint(20) NOT NULL AUTO_INCREMENT、
`created_at` 日時 デフォルト NULL、
主キー (`oid`)
) エンジン=InnoDB デフォルト文字セット=utf8 照合=utf8_unicode_ci
セット内の 1 行 (0.00 秒)

もう一つの注意点は、テーブルのストレージ エンジンを変更することは推奨されないということです。テーブルを作成するときは、どのストレージ エンジンを使用するかを検討する必要があります。

本日の注文

コマンド: show engines;

標準構文: show stroage engines;

ストレージはオプションです。

機能: 現在の MySQL バージョンでサポートされているストレージ エンジンを表示します。

例 (MySQL バージョン: 5.7.20):

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

使用シナリオ: この機能は、現在のデータベース バージョンでサポートされているストレージ エンジンとデフォルトのストレージ エンジンを表示する場合に非常に便利です。

エンジン: ストレージ エンジン名。

サポート: 現在の MySQL サーバー バージョンがストレージ エンジンをサポートしているかどうかを示します。YES はサポートされていることを意味し、NO はサポートされていないことを意味します。

コメント: Innodbなどのストレージエンジンの特性

トランザクション、行レベルのロックなどをサポートします。

トランザクション: トランザクションをサポートするかどうか。YES はサポートを意味し、No はサポートしないことを意味します。

XA と Savepoints: これら 2 つの属性はトランザクションに関連しています。トランザクションが Yes の場合、これら 2 つの属性は意味を持ちますが、それ以外の場合は両方とも NO になります。

以下もご興味があるかもしれません:
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySQL ストレージエンジンの簡単な紹介
  • MySql ストレージ エンジンとインデックスに関する知識のまとめ
  • MySQL MyISAM デフォルト ストレージ エンジンの実装原則
  • MySQLでよく使われる4つのストレージエンジンについて簡単に説明します。
  • MySQL ストレージエンジン InnoDB の設定と使用方法の説明
  • MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要
  • MySQL共通ストレージエンジンの機能と使用方法の詳細な説明
  • 一般的な MySQL ストレージ エンジンとパラメータ設定およびチューニングの紹介
  • MySQLのストレージエンジンについてお話しましょう

<<:  Linux でのスケジュールされたタスクと遅延タスクの詳細な説明

>>:  JavaScript 関数のパフォーマンスを測定するさまざまな方法の比較

推薦する

Nginx サーバーが Systemd カスタム サービス プロセス分析を追加

1. nginxを例に挙げるyumコマンドを使用してNginxをインストールしましたSystemd ...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

docker-maven-pluginプラグインは対応するjarパッケージを取得できません

docker-maven-plugin プラグインを使用する場合、Maven は対応する jar パ...

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

基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...

MySQL 8.0 の新しいリレーショナル データベース機能の詳細な説明

序文MySQL 8.0 の最新バージョンは 8.0.4 rc であり、正式版は近日中にリリースされる...

Windows Server 2016 標準キー アクティベーション キー シリアル番号

Windows Server 2016 アクティベーション キーを皆さんと共有したいと思います。wi...

Vueコンポーネントのルーティング強調表示問題の解決策

序文以前は、キャッシュを使用してルートを強調表示していました。すべてのルートをトラバースし、クリック...

MYSQL row_number() および over() 関数の詳細な使用方法

構文フォーマット: row_number() over(partition by grouping ...

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

タグのhref属性とonclickイベントの使用例

a タグは主にページ ジャンプを実装するために使用され、これは href 属性または onclick...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...

シンプルなデータ応答システムを実装する

目次1. デップ2. 観察者を理解する3. 監視と観察者を理解する4. トリガーの依存性5. プロセ...

Flask アプリケーションの Docker デプロイ実装手順

1. 目的Flask アプリケーションをローカルで作成し、Docker でパッケージ化し、独自のサー...

JavaScript の 7 つのデータ型の詳細な説明

目次序文:詳しい紹介:練習する:要約する序文: Python、Java、Cシリーズなど、すべての主要...

jQueryはhide()とtoggle()関数を使用してカメラブランド表示の非表示機能を実現します。

最近、jQuery を学習しているときに、show()、hide()、toggle() 関数に出会い...