1

MySQL とのトランザクションが必要になるようですが、InnoDB/MyISAM テーブルが混在する Mysql でトランザクションを管理する方法がわかりません。すべてが非常に混乱しているようです。

なぜテーブルを混ぜ合わせたいのかと思うかもしれません...答えはパフォーマンスです。多くの開発者が気付いているように、InnoDB テーブルは一般的にパフォーマンスが悪いですが、代わりに高い分離レベルなどを提供します...

この問題に関するアドバイスはありますか?

4

4 に答える 4

6

MyISAM と InnoDB のパフォーマンスの違いを過大評価していると思います。MyISAM は、データ ウェアハウジングの状況 (フル テーブル スキャン レポートなど) では高速ですが、通常の OLTP クエリでは多くの場合、実際には InnoDB の方が高速です。

InnoDB はノブが多いため調整が難しくなりますが、適切に調整された InnoDB システムは、より優れたロックとより優れた I/O パターンにより、MyISAM よりもスループットが高くなることがよくあります。

于 2009-01-01T14:56:45.790 に答える
2

MyISAM テーブルにトランザクションを含めることができないことを考えると、実際の問題が何であるかはわかりません。トランザクションが必要なデータはすべて InnoDB テーブルにある必要があり、使用しているアクセス ライブラリを使用するか、手動の SQL コマンドを使用してトランザクションを管理します。

于 2009-01-01T10:59:31.183 に答える
0

1 つのエンジンのみを使用することには、明確なパフォーマンス上の利点があります。

1 つのエンジン用に調整されたサーバーは、もう一方のエンジン用には調整されません。両方とも、専用にかなりの量の RAM を割り当てる必要があります。したがって、両方に最適な量を与えることはできません。

データベース サーバー (明らかに 64 ビットですが、それでも比較的小さい) に 8G の RAM があるとします。その約 3/4 を innodb ページ キャッシュに割り当てることができます。または、MyISAM を使用している場合は、その約半分を key_buffer にすることができます。両方を行うことはできません。

エンジンを選択し、それを排他的に使用します。パフォーマンスの問題を回避する方法はいくつかありますが、そのほとんどは簡単ではありません (つまり、データ構造やアプリケーションの再設計が必要になります)。

于 2009-01-06T21:25:04.603 に答える
0

簡単に言えば、MyISAM にはトランザクション サポートがないということです。トランザクションを開始し、一部の InnoDB テーブルでデータを追加または変更し、MyISAM テーブルでデータを追加または変更した後、ロールバックする必要がある場合、MyISAM の変更は削除できません。そのような混合エンジンをサポートするには、MyISAM に保存されているデータへの変更がトランザクションの「外部」で発生することをアプリケーションが認識している必要があります。

一部のプロセスでトランザクションが必要な場合は、トランザクション可能でなければならないデータを分離し、そのすべてのデータを InnoDB に配置します。

于 2009-04-29T23:35:27.170 に答える