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

推薦する

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

JavaScript 遅延読み込みの詳細な説明

目次遅延読み込みCSS スタイル: HTML部分:スクリプト部分:要約する遅延読み込み名前の通り、私...

Linux で MySQL パスワードを忘れた場合の解決策

問題は次のとおりです。mysql -uroot -p コマンドを入力しましたが、パスワードを忘れてし...

Vue3.0 でページング コンポーネントを手動でカプセル化する方法

この記事では、vue3.0の手動カプセル化ページングコンポーネントの具体的なコードを参考までに紹介し...

MySQLプロセス関数の一般的な使用例の分析

この記事では、例を使用して MySQL プロセス関数の一般的な使用方法を説明します。ご参考までに、詳...

Linux プロセスが占有するポート番号を表示する 6 つの方法

Linux システム管理者にとって、サービスがポートに正しくバインドされているか、またはポートをリッ...

CSS3 を使用したテキスト折り紙効果のサンプルコード

序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...

Vue computedのキャッシュ実装原理の詳細な説明

目次計算結果を初期化する依存関係の収集アップデートを配布する総括するこの記事では、計算された初期化と...

ウェブサイトのパフォーマンスを向上させるためのウェブサーバーの改善

<br />このシリーズの最初のセクションでは、Web サイトのパフォーマンスを向上させ...

埋め込みJavaScriptと外部リンクの基本的な応用方法

目次埋め込みJavaScriptと外部リンクの基本的な応用JavaScript の記述方法には、イン...

LinuxにPython 3.6をインストールして落とし穴を避ける

Python 3のインストール1. 依存環境をインストールするPython3 はインストール プロセ...

MySQLクエリ構文の概要

序文:この記事では主に、MySQL の where、group by、order by、limit、...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

JavaScript で虫眼鏡の特殊効果を実現

達成される効果:マウスを小さな画像の上に置くと、小さなブロックが小さな画像の上に表示され、この小さな...