1. MySQLのデフォルトストレージエンジンの変更 MySQL 5.1 より前のバージョンでは、デフォルトの検索エンジンは MyISAM です。MySQL 5.5 以降では、デフォルトの検索エンジンは InnoDB に変更されます。 2. MyISAMとInnoDBストレージエンジンの主な機能 MyISAM ストレージ エンジンの特徴は、テーブル レベルのロック、トランザクションとフルテキスト インデックスのサポートがないことであり、バックエンド データベースとして一部の CMS コンテンツ管理システムに適しています。ただし、テーブル ロック構造は、同時実行性が高く、負荷の高い運用システムには不十分です。 MySQL 5.7 MyISAM ストレージ エンジンの機能は次のとおりです。 InnoDB ストレージ エンジンの機能は、行レベルのロック、トランザクション セキュリティ (ACID 互換性)、外部キーのサポート、FULLTEXT タイプのインデックスのサポートです (FULLTEXT タイプのインデックスはバージョン 5.6.4 以降でサポートされています)。 InnoDB ストレージ エンジンは、コミット、ロールバック、クラッシュ回復機能を備えたトランザクション セーフ ストレージ エンジンを提供します。 InnoDB は、膨大なボリュームを処理するときに最大のパフォーマンスを発揮するように設計されています。その CPU 効率は、おそらく他のディスクベースのリレーショナル データベース エンジンとは比べものにならないほど優れています。 MySQL 5.7 InnoDB ストレージ エンジンの機能は次のとおりです。 知らせ: InnoDB テーブルの行ロックは絶対的ではありません。SQL ステートメントの実行時に MySQL がスキャンする範囲を決定できない場合、InnoDB テーブルはテーブル全体をロックします (例: 2 つのタイプの主な違いは、InnoDB がトランザクション、外部キー、行レベルのロックをサポートしていることです。 MyISAM はこれをサポートしていません。したがって、MyISAM は小規模なプロジェクトでの使用にのみ適していると考えられることがよくあります。 3. MyISAMとInnoDBのパフォーマンステスト 次の2枚の写真はMyISAMとInnoDBの公式ストレステスト結果です。 CPU コアの数が増えるにつれて、InnoDB のスループットが向上しますが、MyISAM のスループットはほとんど変化しないことがわかります。明らかに、MyISAM のテーブル ロック メカニズムによって読み取りおよび書き込みのスループットが低下します。 4. トランザクションがサポートされているかどうか MyISAM は非トランザクション エンジンであり、MyISAM エンジンを搭載した MySQL は高速なストレージと取得、および全文検索機能を提供できるため、データ ウェアハウスなどの頻繁にクエリを実行するアプリケーションに適しています。 InnoDB はトランザクションセーフです。 トランザクションは高度な処理方法です。例えば、列の追加、削除、変更中にエラーが発生した場合、トランザクションをロールバックして復元することができますが、MyISAM ではこれができません。 5. MyISAMとInnoDBの構造の違い (1)各MyISAMはディスク上の3つのファイルに保存されます。
(2) ディスクベースのリソースは、InnoDB テーブルスペースのデータ ファイルとそのログ ファイルです。InnoDB テーブルのサイズは、オペレーティング システム ファイルのサイズによってのみ制限され、通常は 2 GB です。 6. MyISAMとInnoDBのテーブルロックと行ロックの説明 MySQL テーブル レベルのロックには、テーブル共有読み取りロック (テーブル読み取りロック) とテーブル排他書き込みロック (テーブル書き込みロック) の 2 つのモードがあります。これは何を意味するのでしょうか? MyISAM テーブルが読み取られる場合、同じテーブルに対する他のユーザーの読み取り要求はブロックされませんが、同じテーブルへの書き込み操作はブロックされます。また、MyISAM テーブルへの書き込み操作は、同じテーブルに対する他のユーザーの読み取りおよび書き込み操作をブロックします。 InnoDB の行ロックは、インデックス項目をロックすることによって実装されます。つまり、InnoDB は、データがインデックス条件を通じて取得される場合にのみ行レベルのロックを使用し、それ以外の場合はテーブル ロックを使用します。行レベルのロックは、ロックの取得および解放操作ごとに、テーブル ロックよりも多くのリソースを消費します。 2 つの InnoDB トランザクションがデッドロックすると、各トランザクションによって影響を受ける行数が計算され、行数が少ないトランザクションがロールバックされます。 InnoDB がロック シナリオに関与していない場合、InnoDB はそれを検出できません。タイムアウトをロックすることによってのみ解決できます。 7. データベーステーブルに特定の行数を保存するかどうか InnoDB はテーブル内の特定の行数を保存しません。つまり、 8. 選び方 MyISAM は次の場合に適しています:
InnoDB は次の場合に適しています:
各テーブルを作成するコードは、データ エンジンを指定する最後の TYPE パラメータを除いて同一であることに注意してください。 その他の違い: 1. AUTO_INCREMENT タイプのフィールドの場合、InnoDB にはこのフィールドのみを持つインデックスが含まれている必要がありますが、MyISAM テーブルでは他のフィールドとの結合インデックスを作成できます。 2. DELETE FROM table を使用すると、InnoDB はテーブルを再作成せず、行を 1 つずつ削除します。 3. LOAD TABLE FROMMASTER 操作は InnoDB では機能しません。解決策としては、まず InnoDB テーブルを MyISAM テーブルに変更し、データをインポートした後で InnoDB テーブルに戻すことです。ただし、これは追加の InnoDB 機能 (外部キーなど) を使用するテーブルには適用されません。 4. InnoDB ストレージ エンジンは MySQL サーバーと完全に統合されています。InnoDB ストレージ エンジンは、データとインデックスをメイン メモリにキャッシュするための独自のバッファー プールを維持します。 5. 自己増分フィールドの場合、InnoDB にはこのフィールドのみのインデックスが含まれている必要がありますが、MyISAM テーブル内の他のフィールドとの共同インデックスを作成できます。 6. テーブル全体をクリアする場合、InnoDB は行を 1 つずつ削除するため、非常に遅くなります。 MyISAM はテーブルを再構築します。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Windows システムに VirtualBox と Ubuntu 16.04 をインストールするための詳細なチュートリアル
>>: JSはモバイル端末の画面を1つずつ上下にスライドさせる機能を実装します
WeChat アプレット プロジェクトを書いていたとき、その中に「都市選択」機能がありました。作者は...
1. リンクハイパーテキスト リンクは HTML において非常に重要です。基本的な形式は次のとおりで...
Cocos Creator モジュラースクリプトCocos Creator を使用すると、コードを複...
目次Tomcat ダウンロードチュートリアルTomcat インストールチュートリアルTomcat の...
この記事の例では、ドロップダウンリスト選択ボックスを実装するためのJavaScriptの具体的なコー...
この記事では、MySQL での重複キー更新時の replace into と insert into...
この記事では、テーブルページング機能を実現するためのVueの具体的なコードを例として紹介します。具体...
Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所...
1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...
ページ内にはjs、cssなどの外部ファイルが導入されており、外部ファイルのエンコードが現在のページフ...
現象: MySQL バージョン 5.7 以降では、日付型と日付時刻型のデフォルト値が「0000-00...
背景: MySQL では、レベルに制限がある場合、たとえば、ツリーの最大深度を事前に決定できる場合、...
High Performance MySQL バージョン 3 (セクション 4.1.7) を見ると、...
携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...
目次MySQL Shell import_table データのインポート1. import_tabl...