|
MyISAMとInnoDBは最も有名で広く使われているMySQLストレージエンジンの2つです。本日は、MySQLにおけるMyISAMとInnoDBの違いと、MyISAMとInnoDBの選択について説明します。
MyISAMとは?
MyISAMは、MySQLリレーショナル・データベース管理システム(5.5以前)のデフォルト・ストレージ・エンジンです。この MySQL テーブルストレージ構造は、古い ISAM コードを拡張し、多くの便利な機能を備えている。MySQL の新しいバージョンでは、InnoDB エンジンがトランザクション、参照整合性、より高い同時実行性において優れているため、広く MyISAM に取って代わり始めています。 各 MyISAM テーブルはハードドライブ上の 3 つのファイルに対応する。.frmファイルはテーブル定義を保持しますが、このファイルはMyISAMエンジンの一部ではなく、サーバの一部です。.MYDはテーブルデータを保持し、.MYIはテーブルのインデックスファイルです。
InnoDBとは何ですか?
InnoDB は MySQL のもう 1 つのストレージ エンジンで、現在 MySQL AB の新しいリリースの標準となっており、すべてのバイナリ インストールに含まれ、5.5 以降ではデフォルトのストレージ エンジンとなっています。他のストレージエンジンと比較して優れている点は、ACID準拠のトランザクション(PostgreSQLと同様)とパラメータの整合性(すなわち外部キーのサポート)をサポートしていることである。
Innobaseは二重認証ライセンスを使用している。GNUディストリビューションで配布されており、商用ソフトウェアにInnoDBを組み込みたい他のグループもライセンスを取得することができる。
MyISAMとInnoDBの主な違いは、パフォーマンスとトランザクション制御である。myISAMは、以前のISAM(Indexed Sequential Access Method、5.0以降MySQLではサポートされなくなった)の拡張実装である。ISAMは、読み取りの頻度に対処するために適して設計されていた書き込みの頻度よりもはるかに大きいような状況なので、ISAMと後のMyISAMは、物事をサポートするために考慮されていない、TPMを除いて、トランザクションレコードを必要としない、ISAMのクエリの効率はかなり、非常に少ないメモリ消費量です。 MyISAMはこのような利点を受け継ぎながら、時代とともに多くの実用的な新機能や関連ツールを提供してきた。例えば、同時実行制御を考慮し、テーブルレベルのロックが提供され、MyISAM自体はフォールトトレランスをサポートしていないが、myisamchkによりフォールトリカバリを行うことができる。また、MyISAM は各テーブルがそれぞれ独立したストレージファイル(MYD データファイルと MYI インデックスファイル)を使用しているため、バックアップとリカバリが非常に便利であり(コピーと上書きが可能)、オンラインリカバリにも対応している。他のストレージエンジンと比較して、MyISAMはテーブルをチェックし修復するためのほとんどのツールを備えている。 MyISAMテーブルは圧縮することができ、フルテキスト(全文)検索をサポートする。MyISAMはトランザクションセーフではなく、外部キーもサポートしていないので、アプリケーションがトランザクションではなく、基本的なCRUD操作のみを扱うのであれば、MyISAMが選択される。 InnoDBは、MVCC(Multi-Version Concurrency Control)と行レベルロックを使用して、ACID準拠のトランザクションサポートを提供し、高度な並行読み書きのために設計されています。 InnoDBは、フェイルバック機能を備えた外部キーの参照整合性をサポートしています。また、InnoDBのパフォーマンスは、実際に良いですが、特に大量のデータを処理する場合には、公式の言葉で:InnoDBのCPU効率は、他のディスクベースのリレーショナルデータベースストレージエンジンを比較することはできません。InnoDBとMyISAMが異なっているため、しかし、InnoDBのバックアップのリカバリは、少し、マルチテーブルスペースのサポートの4.1以降のバージョンを使用しない限り、彼のデータファイルは、独立して各テーブルに対応していません。その代わりに、共有テーブル空間を使用し、単純なコピーと上書きは適用できず、MYSQLを停止した後にデータをリカバリする必要があります。各テーブルに対して独立したテーブル空間ファイルを持つPer-Tablespacesdの使用は、より単純です。InnoDBテーブルは非常に高速で、BDBよりも豊富な特性を持っているため、トランザクション・セーフ・ストレージ・エンジンが必要な場合は、InnoDBを使用することをお勧めします。
一般的に、トランザクション・サポートが必要で、同時読み書きの頻度が高い場合は、InnoDBが良い選択です。同時読み書き頻度が高くない場合は、BDBを検討することもできますが、BDBサポートはMySQL 5.1以降では利用できなくなるため、このオプションは利用できなくなります。このオプションは使用できなくなりました。
InnoDBはデフォルトでトランザクションをオンにしており(autocommit = 0に設定)、レコードが挿入されるたびに、InnoDB型テーブルはそれを個別のトランザクションとして扱う。だから我々は10,000レコードを挿入し、トランザクションを閉じていない場合、テーブルのInnoDBタイプは、挿入の合計時間に対処するために10,000トランザクションとしてそれを扱うことは、この時間の多くは、最初にトランザクションをオフにする必要がありますし、挿入されるので、ヒープとBDB(バークレーDB)としては、比較的、以下の人気の速さヒープとBDB(バークレーDB)については、相対的に言えば、人気は最初の2つほど良いではありませんが、いくつかのケースでは、それはまだかなり適用可能ですヒープストレージエンジンは、メモリ内のデータを格納するために、ディスクのI / Oを待つことがないため、速度は非常に高速です。しかし、インメモリストレージエンジンであるため、サーバーが再起動された後に行われた変更は失われます。ヒープはテスト目的に適しています。BDBはMySQLの最初のトランザクション・セーフ・ストレージ・エンジンであり、Berkeley DBデータベース・ライブラリに基づいて構築されているため、トランザクション・セキュアでもあるが、MySQLでトランザクション・ストレージ・エンジンを探している人のほとんどは、MVCCまたは行レベル・ロックをサポートするストレージ・エンジンを探しているのに対し、BDBはページレベル・ロックしかサポートしていないため、BDBはInnoDBよりも明らかに人気がない。
InnoDB エンジン
InnoDBはロールバックをサポートするトランザクショナル・ストレージ・エンジンで、大量のデータを扱う際に高いパフォーマンスを発揮するように設計されています。 実行時にメモリ内にバッファ・プールを作成し、データとインデックスをバッファリングします。
InnoDB エンジンの利点
1、トランザクション処理のサポート、ACIDトランザクション特性;
2、SQL標準の4つの分離レベルの実装;
3, 行レベルのロックと外部キー制約のサポート;
4、データ復旧にトランザクション・ログを使用できる。
5、行ロックのロックレベルは、行ロックの利点は、頻繁にテーブルの変更の高い並行処理に適用され、高い並行処理がMyISAMのパフォーマンスよりも優れています。
6、インデックスだけでなく、自分自身をキャッシュするだけでなく、キャッシュデータは、MyISAMに比べてより多くのメモリを必要とします。 InnoDBエンジンの欠点
それは、テーブルの行数を保存しないため、COUNT統計情報を使用すると、テーブル全体をスキャンします。
MyISAMエンジン
MyISAMは5.5.5以前のMySQLのデフォルトエンジンであり、高速リード用に設計されている。
MyISAM エンジンの利点
1.高速リードが可能;
2.テーブル内の行数を保存するため、COUNT 統計を使用する際にテーブル全体をスキャンする必要がない; MyISAM エンジンの短所
1. テーブルロックのロックレベルは、テーブルロックの利点は、低オーバーヘッド、高速ロックである; 欠点は、ロック粒度、ロックインパルスの発生確率が高く、同時実行能力に対応するために、このエンジンは、クエリベースのビジネスに適しています。
2、このエンジンは、トランザクションをサポートしていない、外部キーをサポートしていません。
3、INSERTとUPDATE操作は、テーブル全体をロックする必要があります;
4は、テーブルの行数を格納するので、SELECT COUNT(*) FROM TABLEは、直接値を読み取る必要がある完全なテーブルスキャンを必要とせずに保存されています。 適用可能なシナリオ
MyISAMは、(1) カウント計算を大量に行う場合、(2) 挿入頻度が低く、クエリの頻度が非常に高い場合、(3) トランザクションを行わない場合に適している。
InnoDB が適しているのは、(1) 高い信頼性が要求される場合、またはトランザクションが必要な場合、(2) テーブルの更新とクエリが非常に頻繁で、テーブルロックの機会が比較的大きい場合。
テーブルの比較
属性 | MyISAM | ヒープ | BDB | InnoDB | トランザクション | 未サポート | 未サポート | 対応 | 対応 | ロックの粒度 | テーブルロック | テーブルロック | ページ・ロック(ページ、8KB) | 行ロック | ストレージ | 分割ファイル | メモリ内 | テーブルごとに1ファイル | テーブルスペース | 分離レベル | なし | なし | 読み取りコミット | すべて | ポータブルフォーマット | ポータブルフォーマット | 該当なし | なし | なし | 参照整合性 | なし | いいえ | いいえ | いいえ | データ主キー | なし | いいえ | いいえ | いいえ | MySQLキャッシュデータレコード | いいえ | なし | あり | あり | 可用性 | フルバージョン | フルバージョン | MySQL-Max | フルバージョン |
詳細な相違点
1、InnoDBは、MySQL 5.6以降でサポートされているFULLTEXT型インデックスをサポートしていない(実験的)。
2、InnoDB はテーブルの行数を保存しない。つまり、テーブルから select count() を実行する時、InnoDB はテーブル全体をスキャンして行数を計算しなければならないが、MyISAM は単に保存された行数を読み出すだけである。count()文がwhere条件を含む場合、2つのテーブル操作は同じであることに注意してください。
3, AUTO_INCREMENTタイプのフィールドの場合、InnoDBはフィールドのインデックスのみを格納しなければなりませんが、MyISAMテーブルでは他のフィールドとジョイントインデックスを構築することができます。
4、DELETE FROMテーブルは、InnoDBは、テーブルを再構築されませんが、行ごとに削除します。
5、LOAD TABLE FROM MASTER操作は、InnoDBのために動作しませんが、解決策は、最初のMyISAMテーブルにInnoDBテーブルを変更するには、データをインポートし、InnoDBテーブルに変更されますが、テーブルの追加のInnoDBの機能(外部キーなど)の使用には適用されません。
6、さらに、InnoDBテーブルの行のロックは、SQLステートメントの実行でMySQLがスキャンの範囲を決定することはできません場合は、InnoDBテーブルもテーブル全体をロックされます絶対的ではありません。
7、InnoDBはフルテキストインデックスをサポートしていませんが、MyISAMはサポートしています。フルテキストインデックスは、(非アクティブ化単語を除く)反転インデックスを確立するために、各単語のchar、varcharとテキストを指します。MyISAMのフルテキストインデックスは、中国語の単語をサポートしていないため、有用ではない、空白のスペースにユーザーの単語を追加する必要がありますし、データテーブルに書き込むと、4文字未満の中国語は無視され、同じ単語として非アクティブ化された単語。
|
前へ:組立実験問題次へ:int型からvarchar型へのsqlステートメント
|