何であるInnoDB
とMyISAM
してMySQL
?
何であるInnoDB
とMyISAM
してMySQL
?
回答:
InnoDB
およびはMYISAM
、のストレージエンジンですMySQL
。
これら2つは、ロックの実装が異なります。InnoDB
テーブル内の特定の行をMyISAM
ロックし、MySQL
テーブル全体をロックします。
タイプを指定するには、DBでテーブルを作成するときにMYISAM
OR InnoDB
を指定します。
見て
InnoDBはMySQLのストレージエンジンであり、MySQL ABによって配布される現在のすべてのバイナリに標準で含まれています。MySQLで使用できる他のストレージエンジンに対する主な機能強化は、ACID準拠のトランザクションサポートです。
MyISAMは、5.5より前のMySQLリレーショナルデータベース管理システムバージョンのデフォルトのストレージエンジンです1。古いISAMコードに基づいていますが、多くの便利な拡張機能があります。 MyISAMの主な欠点は、トランザクションサポートがないことです。 MySQL 5.5以降のバージョンでは、参照整合性制約とより高い同時実行性を確保するためにInnoDBエンジンに切り替えられました。
それらはストレージエンジンです。
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の主要な強みの1つであることを追加したいと思います(使いやすく、微調整なしの優れたパフォーマンスに加えて)。トランザクションが必要なすべての操作については、InnoDBをそのまま使用してください。ただし、特定の状況でトランザクションが不要な場合、MyISAMは実際に速度を上げることができ、InnoDBと比較して必要なディスク領域とRAMが少なくて済みます。
とはいえ、InnoDBは常に改善されています。
データの整合性を維持するためにトランザクションを追跡する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でテーブルレベルのロックを手動で取得する必要があります。
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による本
MySQLサーバーがクラッシュした場合、データは、その大きなInnoDBトランザクションファイルからよりも、一連のMyISAMテーブルからはるかに簡単に回復できます。各MyISAMテーブルには個別のファイルがあり、クラッシュ時にこのテーブルに書き込み操作が行われていなくても、まったく影響を受けません。InnoDBの場合、MySQLサーバー全体のトランザクションファイル全体を再インデックス付けするか、クラッシュ後に何をする必要があります。それはかなり厄介なことになります。
InnoDBはデフォルトではありませんmyISAM https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html "InnoDBはデフォルトのMySQLストレージエンジンです。別のデフォルトストレージエンジンを設定していない限り、 ENGINE =句のないCREATE TABLEステートメントはInnoDBテーブルを作成します