44

MySqlのMyISAMとInno DBタイプの違いは何ですか?

4

12 に答える 12

58

主な違いは、InnoDB がトランザクションをサポートしているのに対し、MyISAM はサポートしていないことです。

他にも多くの違いがありますが、私が知っている一般的な違いは次のとおりです。

  • 通常、MyISAM は検索が高速であると考えられてきましたが、最近の InnoDB の改善により、この違いが取り除かれ、同時実行性の高いワークロードのパフォーマンスが向上しています。
  • InnoDB はトランザクションをサポートしますが、MyISAM はトランザクションをサポートしません
  • InnoDB は参照整合性をサポートしますが、MyISAM はサポートしません
  • InnoDB はインデックスを少し異なる方法で処理し、すべてのインデックスの一部として主キーを格納します (インデックスがディスク上でより多くのスペースを占有するようにしますが、インデックスをカバーする可能性も高くなります)。
  • MyISAM はテーブル レベルのロックを行いますが、InnoDB は行レベルのロックを行います
  • MySQL 構成ファイルで異なるメモリ/バッファ/インデックス設定が使用されている
  • 通常、InnoDB はクラッシュ リカバリが優れていると言われています
  • 別の回答で述べたように、データは異なる方法でディスクに保存されます。InnoDB はこの領域で構成可能であり、必要に応じてテーブルごとに 1 つのファイルなどを持つことができると思います

Google 検索または MySQL サイトで、他にも多くの違いがさらに詳細に表示されると確信しています。

于 2008-11-10T09:45:20.710 に答える
19

InnoDBとMyISAM

機能とパフォーマンスの比較:

  1. InnoDBは新しく、MyISAMは古いです。
  2. InnoDBはより複雑ですが、MyISAMはより単純です。
  3. InnoDBはデータの整合性がより厳密ですが、MyISAMは緩いです。
  4. InnoDBは挿入と更新のための行レベルのロックを実装し、MyISAMはテーブルレベルのロックを実装します。
  5. InnoDBにはトランザクションがありますが、MyISAMにはありません。
  6. InnoDBには外部キーと関係の制約がありますが、MyISAMにはありません。
  7. InnoDBのクラッシュリカバリは優れていますが、MyISAMはシステムクラッシュ時のデータ整合性のリカバリが不十分です。
  8. MyISAMには全文検索インデックスがありますが、InnoDBにはありません。

これらの違いに照らして、InnoDBとMyISAMには、互いに独自の長所と短所があります。一部のシナリオでは、それぞれが他のシナリオよりも適しています。

InnoDBの利点

  1. InnoDBは、関係の制約とトランザクションの助けを借りて本質的にデータの整合性を処理するため、データの整合性が優先される場合に使用する必要があります。
  2. 行レベルのロックを利用し、挿入または更新されている同じ行への変更のみを保持するため、書き込みが集中する(挿入、更新)テーブルで高速になります。

InnoDBのデメリット

  1. InnoDBはテーブル間のさまざまな関係を処理する必要があるため、データベース管理者とスキーム作成者は、MyISAMよりも複雑なデータモデルの設計に多くの時間を費やす必要があります。
  2. RAMなどのより多くのシステムリソースを消費します。実際のところ、MySQLのインストール後に実質的に必要がない場合は、InnoDBエンジンをオフにすることを多くの人が推奨しています。
  3. 全文索引はありません。

MyISAMの利点

  1. 設計と作成が簡単なので、初心者に適しています。テーブル間の外部関係についての心配はありません。
  2. 構造が単純なため、全体としてInnoDBよりも高速であるため、サーバーリソースのコストが大幅に削減されます。
  3. フルテキストインデックス。
  4. 読み取り中心の(選択)テーブルに特に適しています。

MyISAMのデメリット

  1. データの整合性(関係の制約など)のチェックは行われず、データベース管理者とアプリケーション開発者の責任とオーバーヘッドが発生します。
  2. 銀行などの重要なデータアプリケーションに不可欠なトランザクションをサポートしていません。
  3. テーブル全体が挿入または更新のためにロックされているため、頻繁に挿入または更新されるテーブルの場合はInnoDBよりも低速です。

比較は非常に簡単です。InnoDBは、頻繁な挿入と更新を必要とするデータクリティカルな状況に適しています。一方、MyISAMは、データの整合性に完全に依存せず、ほとんどの場合、データを選択して表示するだけのアプリケーションでパフォーマンスが向上します。

参照: InnoDBとMyISAMの比較

詳細については、こちらで確認することもできます: MyISAMまたはInnoDB MySQLエンジン?

お役に立てれば。

于 2011-10-15T05:35:44.110 に答える
16

MyISAM は (非標準 SQL) フルテキスト インデックス作成をサポートしていますが、InnoDB はまだサポートしていません。これが、今日 MyISAM を使用する唯一の理由です。

于 2008-11-10T10:53:05.630 に答える
4

MyISAM と InnoDB の最も重要な違いは、InnoDB がトランザクションと外部キーをサポートすることです。外部キーと関連機能 (たとえば、自動カスケード削除) が必要な場合は、InnoDB を使用する必要があります。

InnoDB は、ほとんどの用途で MyISAM よりも低速ですが、ロック メカニズムが優れているため、特定の条件ではより高速に実行できます。MyISAM は、挿入/更新の実行中に読み取りのためにテーブル全体をロックします。InnoDB は行レベルのロックを実行できるため、複数の同時書き込みとテーブルへの読み取りが可能です。

于 2008-11-10T10:14:13.337 に答える
3

MyISAM と InnoDB の詳細については、MySQL のドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html

http://dev.mysql.com/doc/refman/5.1/en/innodb-overview.html

于 2008-11-10T11:58:52.160 に答える
1

主な違いは、 InnoDB がtransactionsをサポートしているのに対し、MyISAM はサポートしていないことです。

于 2008-11-10T09:45:20.493 に答える
1

NFS サポート

MyISAM とは異なり、InnoDB は NFS で問題が発生する場合があります。

InnoDB の構成から(MySQL バージョン 5.5)

注意

データの信頼性を考慮する場合は、NFS ボリューム上のデータ ファイルまたはログ ファイルを使用するように InnoDB を構成しないでください。潜在的な問題は、OS と NFS のバージョンによって異なり、競合する書き込みから保護されていない、最大ファイル サイズの制限などの問題が含まれます。

于 2010-10-14T19:16:24.043 に答える
1

InnoDB の機能 1. 完全な ACID (原子性、一貫性、分離、耐久性) に準拠した完全なトランザクション機能を提供します。

  1. 行レベルのロックがあります。行レベルのロックをサポートすることで、挿入ごとにエンジンがテーブルをロックすることなく、InnoDB テーブルにデータを追加できます。これにより、データベース内の情報の回復と保存の両方が高速化されます。

  2. InnoDB システムの鍵は、インデックスとデータの両方がメモリにキャッシュされ、ディスクに保存されるデータベース、キャッシング、およびインデックス構造です。これにより、非常に高速な回復が可能になり、非常に大きなデータ セットでも機能します。

  3. InnoDB は外部キー制約をサポートしています

  4. InnoDB が自動クラッシュ リカバリをサポート
  5. InnoDB はテーブル圧縮 (読み取り/書き込み) をサポートしています
  6. InnoDB は空間データ型をサポートします (空間インデックスなし)

  7. Innodb は非ロック ANALYZE TABLE をサポートしており、サーバーが長時間実行されている場合にのみ必要です。これは、サーバーがインデックス統計に飛び込み、テーブルが開いたときにインデックス情報を取得するためです。

  8. Innodb には個別のインデックス ファイルがないため、開く必要はありません。

  9. Innodb は、主キーの順序で (ALTER の後) インデックスを一度に 1 行ずつ構築します。つまり、インデックス ツリーは最適な順序で構築されず、断片化されます。現在、InnoDB は構築できないため、InnoDB インデックスを最適化する方法はありません。 MySQL 5.0 でのソートによるインデックス。InnoDB インデックスを削除して再作成しても、データによってはインデックスが断片化される場合があります。

  10. テーブルには、最大 1000 列を含めることができます。

  11. InnoDB 内部の最大キー長は 3500 バイトですが、MySQL 自体はこれを 3072 バイトに制限しています。(MySQL 5.0.17 より前の非 64 ビット ビルド、および 5.0.15 より前のすべてのビルドでは 1024 バイト。)

  12. InnoDB のデフォルトのデータベース ページ サイズは 16KB です。コードを再コンパイルすることにより、8KB から 64KB の範囲の値に設定できます。univ.i ソース ファイルの UNIV_PAGE_SIZE と UNIV_PAGE_SIZE_SHIFT の値を更新する必要があります。
  13. InnoDB テーブルは FULLTEXT インデックスをサポートしていません。

    マイサムの特徴

    1. トランザクションのサポートなし
    2. テーブル レベルのロック
    3. 全文検索を提供
    4. テーブル内のデータに制限はありません。
    5. 高速な COUNT(*)s (WHERE、GROUP BY、または JOIN が使用されていない場合)
    6. 全文索引付け
    7. より小さいディスク フットプリント
    8. 非常に高いテーブル圧縮 (読み取り専用)
    9. 空間データ型とインデックス (R ツリー)
  14. DATA DIRECTORY='/path/to/data/directory' または INDEX DIRECTORY='/path/to/index/directory' を使用すると、MyISAM ストレージ エンジンがテーブルのデータ ファイルとインデックス ファイルを配置する場所を指定できます。ディレクトリは、相対パスではなく、ディレクトリへのフル パス名である必要があります。

詳細については、 http://faisalbhagat.blogspot.com/2014/09/innodb-vs-myisam.htmlを参照してください。

于 2014-09-10T14:42:53.063 に答える
1

MyISAM と InnoDB は、データを異なる方法でディスクに保存します。MyISAM は、データベースにちなんで名付けられたディレクトリに格納された各テーブルのデータ ファイルとインデックス ファイルを使用します。InnoDB は、ibdata1 というファイルにすべてをまとめているようです。

于 2008-11-10T09:48:22.000 に答える
0

MyISAM は、すべてのテーブルをロックしてファイルシステムにファイルを直接コピーするだけで簡単にバックアップできるため、バックアップに関してはより便利です。(perl スクリプトである mysqlhotcopy は mysql の一部です)

InnoDB はもう少し複雑で、そのままでは別のマシンに復元できないため、ファイルをコピーするだけでは不十分です。

ただし、InnoDB のホットコピーを提供する商用ソフトウェアがあります。

于 2008-11-10T13:12:56.503 に答える
0

トランザクションのサポートが大きな違いですが、長時間実行される SELECT クエリと UPDATE ステートメントが混在している場合、テーブル レベルのロックが問題になる可能性があります。

于 2009-10-13T16:26:33.860 に答える
0

InnoDB と MyIsam の違いについて説明します。

InnoDB と MyIsam の違い

いくつかの違い:

  • MYISAMはデータベース トランザクションをサポートしていません。
  • INNODBはトランザクションを提供します
  • MYISAMは、テーブル レベルのロックを提供します。
  • INNODBは行レベルのロックを提供します
  • INNOBDは外部キーをサポートしていますが、MYISAMはサポートしていません...
于 2008-11-10T12:55:27.457 に答える