MySQL のストレージ エンジン MyISAM と innoDB の違い
特定のプロジェクトでは通常、これら 2 つのタイプをどのように選択しますか?
-----解決策---------
MyISAM: これはデフォルトのタイプです。 ISAM は、Indexed Sequential Access Method (インデックス付きシーケンシャル アクセス メソッド) の略称であり、他のストレージ エンジンと比較して、チェックと修復の機能を備えています。ほとんどのテーブルは、MyISAM テーブルを圧縮できますが、トランザクションセーフではなく、外部キーをサポートしません。ロールバックすると不完全なロールバックが発生し、アトミックではありません。大量の SELECT を実行する場合は、MyISAM を選択することをお勧めします。
InnoDB: このタイプは BDB タイプと同じ特性を持ち、外部キーもサポートしているため、トランザクションが必要な場合に便利です。データが大量の INSERT または UPDATE を実行する場合は、パフォーマンス上の理由から、InnoDB テーブルを使用する必要があります。
サポートする InnoDB タイプの標準に影響します。主な理由は、AUTOCOMMIT のデフォルト設定がオンになっており、プログラムがトランザクションを開始するために BEGIN を明示的に呼び出していないため、挿入された項目ごとに自動的にコミットが行われ、速度に重大な影響を及ぼします。 SQL を実行する前に begin を呼び出すと (自動コミットがオンになっている場合でも) 複数の SQL が 1 つのトランザクションを形成するため、パフォーマンスが大幅に向上します。
=========================================== == ===================
MySQL を使用する場合、InnoDB と MyISAM は最も一般的に使用される 2 つのテーブル タイプであり、それぞれに独自の長所と短所があります。特定のアプリケーションに応じて。参考までに、この 2 つの既知の違いを以下に示します。
innodb
InnoDB は、トランザクション (コミット)、ロールバック (ロールバック)、およびクラッシュ回復機能 (クラッシュ回復機能) を備えたトランザクションセーフ (ACID 準拠) テーブルを MySQL に提供します。 InnoDB は、Oracle タイプと一貫した SELECT での行ロック (行レベルでのロック) と非ロック読み取りを提供します。これらの機能により、マルチユーザーの同時操作のパフォーマンスが向上します。 InnoDB の行レベルのロックは非常に小さなスペースに収まるため、InnoDB テーブルでロックをエスカレーションする必要はありません。 InnoDB は、外部キー制約 (FOREIGN KEY 制約) を提供する MySQL 上の最初のテーブル エンジンです。
InnoDB は大容量データベース システムを処理できるように設計されており、その CPU 使用率は他のディスク ベースのリレーショナル データベース エンジンに匹敵しません。技術的には、InnoDB は MySQL バックグラウンド上に配置された完全なデータベース システムであり、データとインデックスをキャッシュするためにメイン メモリ内に独自の専用バッファ プールを確立します。 InnoDB は、他のファイルとは異なり、データとインデックスをテーブルスペースに保存します。たとえば、MyISAM では、テーブルは個別のファイルに保存されます。 InnoDB テーブルのサイズは、オペレーティング システムのファイル サイズによってのみ制限されます (通常は 2 GB)。
InnoDB 内のすべてのテーブルは、同じデータ ファイル ibdata1 に保存されます (複数のファイルまたは独立したテーブル スペース ファイルである場合もあります)。無料の解決策は、データ ファイルをコピーすることです。 binlog をアップするか、mysqldump を使用してください。
MyISAM
MyISAM は MySQL のデフォルトのストレージ エンジンです。
各 MyISAM テーブルは 3 つのファイルに保存されます。 frm ファイルにはテーブル定義が保存されます。 データファイルはMYD(MYData)です。 インデックスファイルはMYI(MYIndex)の拡張子です。
MyISAM は比較的シンプルなので、効率の点で InnoDB よりも優れています。
MyISAM テーブルはファイルの形式で保存されます。これはクロスプラットフォームのデータ転送に使用できます。MyISAM ストレージを使用すると、多くの手間が省けます
以下に詳細と具体的な実装の違いを示します:
1. InnoDB は FULLTEXT タイプのインデックスをサポートしません。 。
2. InnoDB はテーブル内の特定の行数を保存しません。つまり、select count(*) from table を実行するとき、InnoDB はテーブル全体をスキャンして行数を計算する必要がありますが、MyISAM はテーブル全体をスキャンする必要があります。単純に読み取って保存するだけで十分です。 count(*) ステートメントに where 条件が含まれている場合、2 つのテーブルの操作は同じであることに注意してください。
3. AUTO_INCREMENT 型のフィールドの場合、InnoDB にはこのフィールドのみのインデックスが含まれている必要がありますが、MyISAM テーブルでは他のフィールドとの結合インデックスを確立できます。
4. DELETE FROM テーブルの場合、InnoDB はテーブルを再作成せず、行ごとに削除します。
5. LOAD TABLE FROM MASTER 操作は InnoDB では機能しません。ただし、追加の InnoDB 機能の場合は、まず InnoDB テーブルを MyISAM テーブルに変更します。 (外部キーなど) テーブルは適用されません。
www.ixdba.net
さらに、MySQL が SQL ステートメントの実行時にスキャンする範囲を決定できない場合、InnoDB テーブルの行ロックは絶対的ではありません。同じことが InnoDB テーブルにも当てはまります。たとえば、名前が「%aaa%」の場合、テーブル セット num=1 を更新します。
------解決策------------------
MyISAM はトランザクションセーフではありませんが、InnoDB はトランザクションです安全。
MyISAM ロックの粒度はテーブル レベルですが、InnoDB は行レベルのロックをサポートしています。
MyISAM はフルテキスト タイプのインデックスをサポートしていますが、InnoDB はフルテキスト インデックスをサポートしていません。
MyISAM は比較的シンプルなので、効率の点で InnoDB より優れています。小規模なアプリケーションでは MyISAM の使用を検討できます。
MyISAM テーブルはファイルとして保存されます。クロスプラットフォームのデータ転送で MyISAM ストレージを使用すると、多くの手間が省けます。
InnoDB テーブルは、MyISAM テーブルよりも安全であり、データが失われないようにしながら、非トランザクション テーブルをトランザクション テーブルに切り替えることができます (alter table tablename type=innodb)。