MySQLストレージエンジンのMyISAMとInnoDB

3831 ワード

MySQLストレージエンジンのMyISAMとInnoDB :https://www.zybuluo.com/phper/note/78781 Webサイト:MySQLストレージエンジンのMyISAMとInnoDBから転載.ここでは、良い文が削除されるのを防止し、バックアップを残します.
MySQLを使っているうちにMyISAMとInnoDBという2つの概念に疑問がありましたが、どちらのエンジンがどのように異なるのかはずっと私の心の中の疑問です.このパズルを解くために、ネットを探して、次のような情報を見つけました.MyISAMはMySQLのデフォルトデータベースエンジン(5.5版以前)であり、初期のISAM(Indexed Sequential Access Method:インデックス付きシーケンスアクセス方法)によって改良された.パフォーマンスは優れていますが、トランザクションがサポートされていないという欠点があります.しかし、ここ数年の発展の下で、MySQLもInnoDB(別のデータベースエンジン)を導入し、参照整合性と同時違反処理メカニズムを強化し、その後MyISAMに取って代わった.InnoDBはMySQLのデータベースエンジンの1つで、MySQL ABのためにbinaryの標準の1つを発表します.InnoDBはInnobase Oy社が開発し、2006年5月に甲骨文社が買収合併した.従来のISAMとMyISAMに比べて、InnoDBの最大の特徴は、PostgreSQLのようなACID互換トランザクション機能をサポートすることです.現在、InnoDBは2レール制のライセンスを採用しており、1つはGPLライセンスであり、もう1つは専有ソフトウェアライセンスである.
MyISAMとInnoDBの違いは何ですか?
1.ストレージ構造MyISAM:各MyISAMは、ディスク上に3つのファイルとして格納されます.最初のファイルの名前はテーブルの名前で始まり、拡張子はファイルのタイプを示します..frmファイルストレージテーブル定義.データファイルの拡張子は.MYD (MYData).インデックスファイルの拡張子は.MYI (MYIndex). InnoDB:すべてのテーブルは同じデータファイル(複数のファイル、または独立した表領域ファイル)に保存され、InnoDBテーブルのサイズはオペレーティングシステムファイルのサイズに限られ、一般的に2 GBである.
2.記憶領域MyISAM:圧縮可能で、記憶領域が小さい.3つの異なるストレージフォーマットをサポートします.静的テーブル(デフォルトですが、データの末尾にスペースがなく、削除されます)、動的テーブル、圧縮テーブルです.InnoDB:より多くのメモリとストレージが必要です.プライマリ・メモリにデータとインデックスをキャッシュするための専用のバッファ・プールが確立されます.
3.移植性、バックアップおよびリカバリMyISAM:データはファイル形式で格納されるので、プラットフォーム間でのデータ転送に便利です.バックアップとリカバリでは、テーブルを個別に操作できます.InnoDB:無料のシナリオは、データファイルをコピーしたりbinlogをバックアップしたり、mysqldumpを使ったりして、データ量が数十Gに達すると相対的に苦痛になります.
4.取引サポートMyISAM:クエリごとに原子性があり、InnoDBタイプよりも実行数が速いが、トランザクションサポートは提供されないパフォーマンスが強調されています.InnoDB:トランザクションサポートトランザクション、外部キーなどの高度なデータベース機能を提供します.トランザクション(commit)、ロールバック(rollback)、クラッシュ修復機能(crash recovery capabilities)を持つトランザクションセキュリティ(transaction-safe(ACID compliant))型テーブル.
5. AUTO_INCREMENT MyISAM:他のフィールドとともに結合インデックスを作成できます.エンジンの自動成長列はインデックスでなければなりません.組合せインデックスの場合、自動成長は最初の列ではなく、前の列に基づいてソートして増加することができます.InnoDB:InnoDBには、このフィールドのみのインデックスが含まれている必要があります.エンジンの自動成長カラムはインデックスでなければなりません.コンビネーションインデックスであれば、コンビネーションインデックスの最初のカラムでなければなりません.
6.表ロックの違いMyISAM:テーブルレベルのロックのみがサポートされ、ユーザーがmyisamテーブルを操作すると、select、update、delete、insert文がテーブルに自動的にロックされ、ロック後のテーブルがinsertの同時性を満たす場合、テーブルの末尾に新しいデータを挿入できます.InnoDB:トランザクションとロー・レベルのロックをサポートすることはinnodbの最大の特徴です.ロー・ロックは、マルチユーザの同時操作の新機能を大幅に向上させます.ただしInnoDBの行ロックは、WHEREのプライマリ・キーのみ有効であり、プライマリ・キー以外のWHEREは全テーブルロックされます.
7.全文索引MyISAM:FULLTEXTタイプの全文インデックスをサポートInnoDB:FULLTEXTタイプの全文インデックスはサポートされていませんが、innodbはsphinxプラグインを使用して全文インデックスをサポートし、より効果的です.
8.テーブル・プライマリ・キーMyISAM:インデックスとプライマリ・キーのないテーブルが存在することを許可します.インデックスは、ローを保存するアドレスです.InnoDB:プライマリ・キーが設定されていないか、空でない一意のインデックスが設定されていない場合、6バイトのプライマリ・キー(ユーザーが表示されない)が自動的に生成され、データはプライマリ・インデックスの一部であり、追加のインデックスはプライマリ・インデックスの値を保存します.
9.表の具体的な行数MyISAM:select count(*)from tableの場合、テーブルの合計行数が保存されます.この値が直接取り出されます.InnoDB:select count(*)from tableを使用する場合、テーブルの合計行数が保存されていません.テーブル全体を巡回し、かなりの消費量を消費しますが、wehre条件を加えるとmyisamとinnodbの処理方法は同じです.
10.CURD操作MyISAM:大量のSELECTを実行する場合、MyISAMはより良い選択です.InnoDB:もしあなたのデータが大量のINSERTあるいはUPDATEを実行するならば、性能の方面の考慮のため、InnoDB表を使うべきです.DELETEは性能的にはInnoDBの方が優れていますが、DELETE FROM tableの場合、InnoDBはテーブルを再構築するのではなく、1行1行の削除になりますので、innodb上で大量のデータが保存されているテーブルを空にするにはtruncate tableというコマンドを使用するとよいでしょう.
11.外部キーMyISAM:サポートされていませんInnoDB:サポート
上記の分析により、基本的にMyISAMエンジンの代わりにInnoDBを使用することが考えられます.なぜなら、InnoDB自体にはトランザクションサポート、ストレージプロセス、ビュー、行レベルロックなど、多くの良好な特徴があり、合併が多い場合、InnoDBの表現はMyISAMよりずっと強いと信じています.また、どのテーブルも万能ではなく、ビジネス・タイプに合わせて適切なテーブル・タイプを選択するだけで、MySQLのパフォーマンスのメリットを最大限に発揮できます.複雑なWebアプリケーションではなく、重要でないアプリケーションであれば、MyISAMのことを考え続けることができます.この具体的な状況は自分で吟味することができます.