MyISAMとInnoDBの違いについてお話しましょう

MyISAMとInnoDBの違いについてお話しましょう

主な違いは次のとおりです。

1. MySQL はデフォルトで MyISAM を使用します。

2. MyISAM はトランザクションをサポートしていませんが、InnoDB はサポートしています。 InnoDB の AUTOCOMMIT はデフォルトでオンになっています。つまり、各 SQL ステートメントはデフォルトでトランザクションにカプセル化され、自動的にコミットされます。これは速度に影響するため、送信用のトランザクションを形成するには、begin と commit の間に複数の SQL ステートメントを配置するのが最適です。

3. InnoDB はデータ行のロックをサポートしていますが、MyISAM は行のロックをサポートしておらず、テーブル全体のロックのみをサポートしています。つまり、MyISAM の同じテーブルに対する読み取りロックと書き込みロックは相互に排他的です。MyISAM が読み取りと書き込みを同時に行う場合、待機キューに読み取り要求と書き込み要求の両方があると、読み取り要求が先に到着しても、デフォルトの書き込み要求の方が優先されます。そのため、MyISAM は、クエリ処理が長時間ブロックされるため、大量のクエリと変更が共存する状況には適していません。 MyISAM はテーブルをロックするため、時間のかかる読み取り操作によって他の書き込みプロセスが不足する可能性があります。

4. InnoDB は外部キーをサポートしますが、MyISAM はサポートしません。

5. InnoDB の主キー範囲は MyISAM の 2 倍まで広くなります。

6. InnoDB は全文インデックスをサポートしていませんが、MyISAM はサポートしています。フルテキスト インデックスとは、char、varchar、text の各単語 (ストップ ワードを除く) に対して逆インデックスを作成することを意味します。 MyISAM のフルテキスト インデックスは、中国語の単語分割をサポートしていないため、実際には役に立ちません。ユーザーは単語分割後にスペースを追加して、データ テーブルに書き込む必要があります。また、中国語の文字数が 4 文字未満の単語は、ストップ ワードのように無視されます。

7. MyISAM は GIS データをサポートしますが、InnoDB はサポートしません。つまり、MyISAM は、ポイント、ライン、ポリゴン、サーフェスなどの空間データ オブジェクトをサポートします。

8. where なしの Count(*) は、InnoDB よりも MyISAM を使用するとはるかに高速です。 MyISAM にはカウンターが組み込まれているため、count(*) のときにカウンターから直接読み取りますが、InnoDB ではテーブル全体をスキャンする必要があります。

そのため、InnoDB で count(*) を実行する場合は通常 where 句が伴い、where 句には主キー以外のインデックス列が含まれている必要があります。

ここで「主キーの外側」が強調されるのはなぜでしょうか? InnoDB では、プライマリ インデックスは生データと一緒に保存されますが、セカンダリ インデックスは別々に保存され、プライマリ キーを指すポインターが存在します。

したがって、count(*) のみの場合は、セカンダリ インデックスを使用してスキャンする方が高速ですが、プライマリ キーは主に、インデックスをスキャンして同時に生データを返す場合に役立ちます。

補足知識: MySQL における ENGINE=InnoDB と AUTO_INCREMENT はどういう意味ですか?

以下のように表示されます。

テーブル `hui_user` を作成します (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ユーザーテーブルID',
 `username` varchar(50) NOT NULL COMMENT 'ユーザー名',
 `password` varchar(50) NOT NULL COMMENT 'ユーザーパスワード、MD5暗号化',
 `email` varchar(50) デフォルト NULL,
 `phone` varchar(20) デフォルト NULL,
 `question` varchar(100) DEFAULT NULL COMMENT 'パスワード回復の質問',
 `answer` varchar(100) DEFAULT NULL COMMENT 'パスワードの回答を取得する',
 `role` int(4) NOT NULL COMMENT 'ロール 0-管理者、1-一般ユーザー',
 `create_time` datetime NOT NULL COMMENT '作成時刻',
 `update_time` datetime NOT NULL COMMENT '最終更新時間',
 主キー (`id`)、
 ユニークキー `user_name_unique` (`username`) BTREE の使用
) ENGINE=InnoDB AUTO_INCREMENT=22 デフォルト CHARSET=utf8;

このSQL文には、

ENGINE=InnoDB AUTO_INCREMENT=22 デフォルトCHARSET=utf8;

しかし、最後の 3 つの項目が何のためにあるのかよくわかりません。

1. ENGINE=InnoDB はデフォルトのエンジンではないのですか?

2. AUTO_INCREMENT=22 は自動インクリメントではないですか?なぜ数字を設定するのですか?

3. my.ini で utf8 がすでに設定されていませんか?

ENGINE=InnoDB はデフォルトのエンジンではないのですか?

——はい、書かなくても大丈夫です、デフォルトが使われます。ここに書くのは、このテーブル作成文で何が使われているかがよくわかるし、テーブル作成時に書くのも良い習慣だからです。

AUTO_INCREMENT=22 は自動増分ではないのですか?なぜ数字を設定するのですか?

——これは自動増分です。ここで数値を設定すると、このステートメントが大きくなるにつれて 22 から自動増分することを意味します。

my.ini ではすでに utf8 が設定されていませんか?

——これはmy.iniで設定されていますが、MySQLの言語エンコーディングを設定します。ここで作成時に設定しないと文字化けした文字が出てしまいます。両者のスコープは異なります。フォームを作成すると、このcharsetがこのテーブルに適用されます。utf-8に設定されたMySQL履歴書データベースデータテーブルの文字セットを表します

MyISAMとInnoDBの違いに関する上記の記事は、編集者が皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL MyISAM デフォルト ストレージ エンジンの実装原則
  • MySQL InnoDBストレージエンジンについて簡単に説明します
  • MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要

<<:  Tomcat をアンインストールして再インストールする方法 (画像とテキスト付き)

>>:  画像のフェードインとフェードアウト効果を実現する js

推薦する

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

Vueはシンプルな計算機を実装する

この記事では、参考までに、Vue の具体的なコードで簡単な計算機を実装する方法を紹介します。具体的な...

Squid を使用して http および https 用のプロキシ サーバーを構築する方法

nginx を導入した際に、フォワードプロキシの設定も nginx を使っていました。しかし、htt...

2021年の花火効果をJSで描画(ソースコードダウンロード付き)

この作品はフロントエンド開発(JSコンテンツ)の知識を使用していますが、フロント部分の後半部分の知識...

HTML テーブルインライン形式の詳細な説明

インライン形式<colgroup>...</colgroup>属性名 属性値...

vue-routeルーティング管理のインストールと設定方法

導入Vue Router 、 Vue.jsの公式ルーティング マネージャーです。 Vue.jsのコア...

MySQL コード実行構造例の分析 [シーケンス、分岐、ループ構造]

この記事では、例を使用して MySQL コード実行構造について説明します。ご参考までに、詳細は以下の...

Windows での MySQL 8.0.13 解凍バージョンのインストール グラフィック チュートリアル

この記事では、参考までにMySQL 8.0.13のインストールグラフィックチュートリアルを紹介します...

デザイン視点技術はデザイン能力の重要な資本である

ある設計士はこう尋ねた。「実際のプロジェクト制作には参加せずに、純粋に設計だけをすることはできますか...

高性能ウェブサイトの最適化ガイド

パフォーマンスの黄金律:エンドユーザーの応答時間のわずか 10% ~ 20% が HTML ドキュメ...

Vue の計算プロパティの紹介

目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...

MySQL インデックス使用状況監視スキル (収集する価値あり!)

概要リレーショナル データベースでは、インデックスは、データベース テーブル内の 1 つ以上の列の値...

vue で h5 側のアプリを開きます (Android か Apple かを判断します)

1. 開発環境 vue+vant 2. コンピュータシステム Windows 10 Profess...

Linux環境でグラフデータベースneo4jを構築する方法の説明

Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...

MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?

私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...