MySQLのInnoDBおよびMyISAMとは何ですか?


121

何であるInnoDBMyISAMしてMySQL


8
MySqlの複製:MyISAM対Inno DB!、またはあなたが選ぶことができます:stackoverflow.com/search
myisam+

これは、データベースエンジンです... kavoir.com/2009/09/...
マチュー

データベースに両方のストレージエンジンを同時に使用できますか?
user130561

1
異なるテーブルで同時に実行できますが、1つのテーブルで、使用するテーブルを選択する必要があります...
Matthieu

回答:


110

InnoDBおよびはMYISAM、のストレージエンジンですMySQL

これら2つは、ロックの実装が異なります。InnoDBテーブル内の特定の行をMyISAMロックし、MySQLテーブル全体をロックします。

タイプを指定するには、DBでテーブルを作成するときにMYISAMOR InnoDBを指定します。


明確でシンプルな答え。
vadiraj jahagirdar

38

見て

InnoDBMyISAM

InnoDBはMySQLのストレージエンジンであり、MySQL ABによって配布される現在のすべてのバイナリに標準で含まれています。MySQLで使用できる他のストレージエンジンに対する主な機能強化は、ACID準拠のトランザクションサポートです。

MyISAMは、5.5より前のMySQLリレーショナルデータベース管理システムバージョンのデフォルトのストレージエンジンです1。古いISAMコードに基づいていますが、多くの便利な拡張機能があります。 MyISAMの主な欠点は、トランザクションサポートがないことです。 MySQL 5.5以降のバージョンでは、参照整合性制約とより高い同時実行性を確保するためにInnoDBエンジンに切り替えられました。


1
データベースに両方のストレージエンジンを同時に使用できますか?
user130561 2010

2
テーブルごとに異なるストレージエンジンを定義できるためです。別の質問は、あなたがすべきかどうかです。mysqlのドキュメントには、このトピックに関するいくつかの説明があります。
nano7

18

それらはストレージエンジンです。

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

MyISAM:デフォルトのMySQLストレージエンジンであり、Web、データウェアハウジング、およびその他のアプリケーション環境で最も使用されるもの。MyISAMはすべてのMySQL構成でサポートされており、デフォルトで別のものを使用するようにMySQLを構成していない限り、デフォルトのストレージエンジンです。

InnoDB:ユーザーデータを保護するためのコミット、ロールバック、およびクラッシュリカバリ機能を備えた、MySQL用のトランザクションセーフ(ACID準拠)ストレージエンジン。InnoDB行レベルロック(粗い粒度のロックへのエスカレーションなし)とOracleスタイルの一貫した非ロック読み取りにより、マルチユーザーの同時実行性とパフォーマンスが向上します。InnoDBはクラスター化されたインデックスにユーザーデータを格納し、主キーに基づく一般的なクエリのI / Oを削減します。データの整合性を維持するために、InnoDBはFOREIGN KEY参照整合性制約もサポートしています。


MySQLをインストールするときに、MySQLデータベースとして使用するストレージエンジンを具体的に指定する必要がありますか?
user130561

3
私の投稿で述べたように、デフォルトはMyISAMです。INNODBなどの別のストレージエンジンの機能を使用する場合は、指定する必要があります。これはインストール時に行われるのではなく、最初のテーブル作成時に行われます。
mluebke

3
しかし、これに従って:-dev.mysql.com/doc/refman/5.7/en/storage-engines.html ; デフォルトのエンジンはInnoDBです。
Harsha 2016

2
dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.htmlによると、「デフォルトのエンジンはMySQL 5.5.5以降のInnoDBです(5.5.5より前のMyISAM)」したがって、デフォルトのエンジンはInnoDB。この回答は、InnoDBをデフォルトエンジンとして使用した最初の一般提供リリースから16日後に投稿されました;)
SOFe

6

テーブルごとに特定のストレージエンジンを指定できることは、MySQLの主要な強みの1つであることを追加したいと思います(使いやすく、微調整なしの優れたパフォーマンスに加えて)。トランザクションが必要なすべての操作については、InnoDBをそのまま使用してください。ただし、特定の状況でトランザクションが不要な場合、MyISAMは実際に速度を上げることができ、InnoDBと比較して必要なディスク領域とRAMが少なくて済みます。

とはいえ、InnoDBは常に改善されています。

InnoDB 1.1のパフォーマンスとスケーラビリティの強化


4

データの整合性を維持するためにトランザクションを追跡するInnoDBとは対照的に、MyISAMはACIDを追跡しません。

MyISAMは同時挿入をサポートします。テーブルにデータファイルの途中に空きブロックがない場合、他のスレッドがテーブルから読み取ると同時に新しい行を挿入できます。MySqlDoc

そのため、MyISAMの方が高速で、必要なスペースも少なくて済みます。たとえば、MySQL MyISAMストレージエンジンはトランザクションをサポートしていません。MySQL MYISAMの制約同時挿入と呼ばれるビットがあります ますデフォルトでは、変数は1に設定されており、同時挿入は前述のように処理されます。0に設定すると、同時挿入は無効になります。2に設定されている場合、行が削除されたテーブルでも、テーブルの最後での同時挿入が許可されます。テーブルの中央にホール/削除された行がない場合(同時挿入時)、INSERTステートメントを実行して、selectと同時にテーブルの最後に行を追加できます。

mysql InnoDBのデフォルトの分離レベルは「Read Repeatable」です。MyISAMの場合、トランザクションはありません。InnoDBは行レベルのロックを使用しますが、MyISAMはテーブルレベルのロックのみを使用できます。そのため、InnoDBはクラッシュの回復をMyISAMよりも優れています。同時実行の影響を避けたい場合は、MyISAMでテーブルレベルのロック手動で取得する必要があります


3

InnoDBはMySQLのトランザクションストレージエンジンであり、MyISAMは非トランザクションストレージエンジンです。言い換えると、InnoDBはACIDプロパティに従ってデータの整合性を維持しますが、MyISAMはACIDプロパティに従っていないため、データの整合性を維持できません。

InnoDB(トランザクション)テーブルでは、ロールバックが必要な場合、トランザクションの変更を簡単に元に戻すことができます。ただし、トランザクションのロールバックが必要な場合、MyISAM(非トランザクション)テーブルに加えられた変更を元に戻すことはできません。

たとえば、当座預金から普通預金に送金したいとします。これは、5つのクエリを含むトランザクションによって行われます。

1 START TRANSACTION;
2 SELECT balance FROM checking WHERE customer_id = 10233276;
3 UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
4 UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
5 COMMIT;

プロセスがステップ4でクラッシュするとします。ここでInnoDBテーブルが使用された場合、ロールバックによって変更が取り消され、お金を失うリスクから救われます。文字通り、ステップ5が正常に実行されない限り、変更はテーブルにコミットされないため、テーブルはクラッシュを認識しません。

ただし、MyISAMテーブルの場合、ロールバックが呼び出されたとき、またはトランザクションの失敗につながるクラッシュが発生した場合、トランザクションの変更を元に戻すことはできません。つまり、ステップ3でトランザクションがクラッシュした場合、当座預金からお金が差し引かれます。しかし、お金はあなたの普通預金口座に追加されなかったでしょう。

礼儀の例:「高性能MySQL:最適化、バックアップ、レプリケーション」-Arjen Lentz、Derek J. Balling、Jeremy Zawodny、Peter Zaitsev、Vadim Tkachenkoによる本


1

MySQLサーバーがクラッシュした場合、データは、その大きなInnoDBトランザクションファイルからよりも、一連のMyISAMテーブルからはるかに簡単に回復できます。各MyISAMテーブルには個別のファイルがあり、クラッシュ時にこのテーブルに書き込み操作が行われていなくても、まったく影響を受けません。InnoDBの場合、MySQLサーバー全体のトランザクションファイル全体を再インデックス付けするか、クラッシュ後に何をする必要があります。それはかなり厄介なことになります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.