MySqlのMyISAMとInno DBタイプの違いは何ですか?
12 に答える
主な違いは、InnoDB がトランザクションをサポートしているのに対し、MyISAM はサポートしていないことです。
他にも多くの違いがありますが、私が知っている一般的な違いは次のとおりです。
- 通常、MyISAM は検索が高速であると考えられてきましたが、最近の InnoDB の改善により、この違いが取り除かれ、同時実行性の高いワークロードのパフォーマンスが向上しています。
- InnoDB はトランザクションをサポートしますが、MyISAM はトランザクションをサポートしません
- InnoDB は参照整合性をサポートしますが、MyISAM はサポートしません
- InnoDB はインデックスを少し異なる方法で処理し、すべてのインデックスの一部として主キーを格納します (インデックスがディスク上でより多くのスペースを占有するようにしますが、インデックスをカバーする可能性も高くなります)。
- MyISAM はテーブル レベルのロックを行いますが、InnoDB は行レベルのロックを行います
- MySQL 構成ファイルで異なるメモリ/バッファ/インデックス設定が使用されている
- 通常、InnoDB はクラッシュ リカバリが優れていると言われています
- 別の回答で述べたように、データは異なる方法でディスクに保存されます。InnoDB はこの領域で構成可能であり、必要に応じてテーブルごとに 1 つのファイルなどを持つことができると思います
Google 検索または MySQL サイトで、他にも多くの違いがさらに詳細に表示されると確信しています。
InnoDBとMyISAM
機能とパフォーマンスの比較:
- InnoDBは新しく、MyISAMは古いです。
- InnoDBはより複雑ですが、MyISAMはより単純です。
- InnoDBはデータの整合性がより厳密ですが、MyISAMは緩いです。
- InnoDBは挿入と更新のための行レベルのロックを実装し、MyISAMはテーブルレベルのロックを実装します。
- InnoDBにはトランザクションがありますが、MyISAMにはありません。
- InnoDBには外部キーと関係の制約がありますが、MyISAMにはありません。
- InnoDBのクラッシュリカバリは優れていますが、MyISAMはシステムクラッシュ時のデータ整合性のリカバリが不十分です。
- MyISAMには全文検索インデックスがありますが、InnoDBにはありません。
これらの違いに照らして、InnoDBとMyISAMには、互いに独自の長所と短所があります。一部のシナリオでは、それぞれが他のシナリオよりも適しています。
InnoDBの利点
- InnoDBは、関係の制約とトランザクションの助けを借りて本質的にデータの整合性を処理するため、データの整合性が優先される場合に使用する必要があります。
- 行レベルのロックを利用し、挿入または更新されている同じ行への変更のみを保持するため、書き込みが集中する(挿入、更新)テーブルで高速になります。
InnoDBのデメリット
- InnoDBはテーブル間のさまざまな関係を処理する必要があるため、データベース管理者とスキーム作成者は、MyISAMよりも複雑なデータモデルの設計に多くの時間を費やす必要があります。
- RAMなどのより多くのシステムリソースを消費します。実際のところ、MySQLのインストール後に実質的に必要がない場合は、InnoDBエンジンをオフにすることを多くの人が推奨しています。
- 全文索引はありません。
MyISAMの利点
- 設計と作成が簡単なので、初心者に適しています。テーブル間の外部関係についての心配はありません。
- 構造が単純なため、全体としてInnoDBよりも高速であるため、サーバーリソースのコストが大幅に削減されます。
- フルテキストインデックス。
- 読み取り中心の(選択)テーブルに特に適しています。
MyISAMのデメリット
- データの整合性(関係の制約など)のチェックは行われず、データベース管理者とアプリケーション開発者の責任とオーバーヘッドが発生します。
- 銀行などの重要なデータアプリケーションに不可欠なトランザクションをサポートしていません。
- テーブル全体が挿入または更新のためにロックされているため、頻繁に挿入または更新されるテーブルの場合はInnoDBよりも低速です。
比較は非常に簡単です。InnoDBは、頻繁な挿入と更新を必要とするデータクリティカルな状況に適しています。一方、MyISAMは、データの整合性に完全に依存せず、ほとんどの場合、データを選択して表示するだけのアプリケーションでパフォーマンスが向上します。
参照: InnoDBとMyISAMの比較
詳細については、こちらで確認することもできます: MyISAMまたはInnoDB MySQLエンジン?
お役に立てれば。
MyISAM は (非標準 SQL) フルテキスト インデックス作成をサポートしていますが、InnoDB はまだサポートしていません。これが、今日 MyISAM を使用する唯一の理由です。
MyISAM と InnoDB の最も重要な違いは、InnoDB がトランザクションと外部キーをサポートすることです。外部キーと関連機能 (たとえば、自動カスケード削除) が必要な場合は、InnoDB を使用する必要があります。
InnoDB は、ほとんどの用途で MyISAM よりも低速ですが、ロック メカニズムが優れているため、特定の条件ではより高速に実行できます。MyISAM は、挿入/更新の実行中に読み取りのためにテーブル全体をロックします。InnoDB は行レベルのロックを実行できるため、複数の同時書き込みとテーブルへの読み取りが可能です。
MyISAM と InnoDB の詳細については、MySQL のドキュメントを参照してください。
http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html
主な違いは、 InnoDB がtransactionsをサポートしているのに対し、MyISAM はサポートしていないことです。
NFS サポート
MyISAM とは異なり、InnoDB は NFS で問題が発生する場合があります。
InnoDB の構成から(MySQL バージョン 5.5)
注意
データの信頼性を考慮する場合は、NFS ボリューム上のデータ ファイルまたはログ ファイルを使用するように InnoDB を構成しないでください。潜在的な問題は、OS と NFS のバージョンによって異なり、競合する書き込みから保護されていない、最大ファイル サイズの制限などの問題が含まれます。
InnoDB の機能 1. 完全な ACID (原子性、一貫性、分離、耐久性) に準拠した完全なトランザクション機能を提供します。
行レベルのロックがあります。行レベルのロックをサポートすることで、挿入ごとにエンジンがテーブルをロックすることなく、InnoDB テーブルにデータを追加できます。これにより、データベース内の情報の回復と保存の両方が高速化されます。
InnoDB システムの鍵は、インデックスとデータの両方がメモリにキャッシュされ、ディスクに保存されるデータベース、キャッシング、およびインデックス構造です。これにより、非常に高速な回復が可能になり、非常に大きなデータ セットでも機能します。
InnoDB は外部キー制約をサポートしています
- InnoDB が自動クラッシュ リカバリをサポート
- InnoDB はテーブル圧縮 (読み取り/書き込み) をサポートしています
InnoDB は空間データ型をサポートします (空間インデックスなし)
Innodb は非ロック ANALYZE TABLE をサポートしており、サーバーが長時間実行されている場合にのみ必要です。これは、サーバーがインデックス統計に飛び込み、テーブルが開いたときにインデックス情報を取得するためです。
Innodb には個別のインデックス ファイルがないため、開く必要はありません。
Innodb は、主キーの順序で (ALTER の後) インデックスを一度に 1 行ずつ構築します。つまり、インデックス ツリーは最適な順序で構築されず、断片化されます。現在、InnoDB は構築できないため、InnoDB インデックスを最適化する方法はありません。 MySQL 5.0 でのソートによるインデックス。InnoDB インデックスを削除して再作成しても、データによってはインデックスが断片化される場合があります。
テーブルには、最大 1000 列を含めることができます。
InnoDB 内部の最大キー長は 3500 バイトですが、MySQL 自体はこれを 3072 バイトに制限しています。(MySQL 5.0.17 より前の非 64 ビット ビルド、および 5.0.15 より前のすべてのビルドでは 1024 バイト。)
- InnoDB のデフォルトのデータベース ページ サイズは 16KB です。コードを再コンパイルすることにより、8KB から 64KB の範囲の値に設定できます。univ.i ソース ファイルの UNIV_PAGE_SIZE と UNIV_PAGE_SIZE_SHIFT の値を更新する必要があります。
InnoDB テーブルは FULLTEXT インデックスをサポートしていません。
マイサムの特徴
- トランザクションのサポートなし
- テーブル レベルのロック
- 全文検索を提供
- テーブル内のデータに制限はありません。
- 高速な COUNT(*)s (WHERE、GROUP BY、または JOIN が使用されていない場合)
- 全文索引付け
- より小さいディスク フットプリント
- 非常に高いテーブル圧縮 (読み取り専用)
- 空間データ型とインデックス (R ツリー)
- DATA DIRECTORY='/path/to/data/directory' または INDEX DIRECTORY='/path/to/index/directory' を使用すると、MyISAM ストレージ エンジンがテーブルのデータ ファイルとインデックス ファイルを配置する場所を指定できます。ディレクトリは、相対パスではなく、ディレクトリへのフル パス名である必要があります。
詳細については、 http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.htmlを参照してください。
MyISAM と InnoDB は、データを異なる方法でディスクに保存します。MyISAM は、データベースにちなんで名付けられたディレクトリに格納された各テーブルのデータ ファイルとインデックス ファイルを使用します。InnoDB は、ibdata1 というファイルにすべてをまとめているようです。
MyISAM は、すべてのテーブルをロックしてファイルシステムにファイルを直接コピーするだけで簡単にバックアップできるため、バックアップに関してはより便利です。(perl スクリプトである mysqlhotcopy は mysql の一部です)
InnoDB はもう少し複雑で、そのままでは別のマシンに復元できないため、ファイルをコピーするだけでは不十分です。
ただし、InnoDB のホットコピーを提供する商用ソフトウェアがあります。
トランザクションのサポートが大きな違いですが、長時間実行される SELECT クエリと UPDATE ステートメントが混在している場合、テーブル レベルのロックが問題になる可能性があります。
InnoDB と MyIsam の違いについて説明します。
いくつかの違い:
- MYISAMはデータベース トランザクションをサポートしていません。
- INNODBはトランザクションを提供します
- MYISAMは、テーブル レベルのロックを提供します。
- INNODBは行レベルのロックを提供します
- INNOBDは外部キーをサポートしていますが、MYISAMはサポートしていません...