ホームページ  >  記事  >  データベース  >  MySQLにおけるMyISAMとInnoDBの違い【詳しく解説】

MySQLにおけるMyISAMとInnoDBの違い【詳しく解説】

藏色散人
藏色散人オリジナル
2018-09-10 17:34:191113ブラウズ

この記事では、MySQL における MyISAM と InnoDB の違いを主に紹介します。必要としている友人の役に立てば幸いです。

MyISAM と InnoDB の違い:

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

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

3.InnoDB はデータ行のロックをサポートしますが、MyISAM は行のロックをサポートせず、テーブル全体のロックのみをサポートします。今すぐ 同じ MyISAM テーブルの読み取りロックと書き込みロックは相互に排他的です。MyISAM が読み取りと書き込みを同時に行う場合、待機キューに読み取り要求と書き込み要求の両方がある場合、読み取り要求が優先されている場合でも、デフォルトの書き込み要求の優先順位が高くなります。先に到着するので、 MyISAM は、クエリ プロセスが長時間ブロックされるため、多数のクエリと変更が共存する状況には適していません。 MyISAM はロック テーブルであるため、時間のかかる読み取り操作は他の書き込みプロセスを枯渇させます。

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

5. InnoDB の主キー範囲は MyISAM の最大 2 倍と大きくなります。

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

7.MyISAM は GIS データをサポートしますが、InnoDB はサポートしません。つまり、MyISAM は、点、線、多角形、面などの空間データ オブジェクトをサポートします。

8. where を使用しない Count(*) は、InnoDB よりもはるかに高速に MyISAM を使用します。なぜなら MyISAM にはカウンターが組み込まれており、count(*) の場合はカウンターから直接読み取りますが、InnoDB はテーブル全体をスキャンする必要があります。したがって、InnoDB で count(*) を実行する場合、通常は where を伴う必要があり、where には主キー以外のインデックス列が含まれている必要があります。なぜここで「主キー以外」が特に強調されるのでしょうか? InnoDB のプライマリ インデックスは生のインデックスと同じであるため、 データは一緒に保存され、セカンダリ インデックスは別々に保存され、プライマリ インデックスを指すポインタが存在します。 鍵。したがって、count(*) だけの場合は、セカンダリ インデックスを使用してスキャンする方が高速ですが、主キーはインデックスのスキャン中に主に raw を返します。 データを活用する場合、その役割はさらに大きくなります。

MySQL の詳細については、MySQL ビデオ チュートリアル または MySQL マニュアル を参照してください。

以上がMySQLにおけるMyISAMとInnoDBの違い【詳しく解説】の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。