3

これは今日、Java 開発者の面接で聞きました。InnoDB に対する MyISAM の利点と、MyISAM がまだ広く使用されている理由をいくつか挙げる必要がありました。そして彼らは、この質問のタイトルとして、私からの答えを聞くのを待っていました。

私が彼ら自身の答えから理解しているように:MyISAMには外部キーがなく、DBは簡単にクラスター化できます(たとえば、サーバーごとに1つのテーブル)。しかし、外部キーなしで InnoDB テーブルを単純に作成できないのはなぜでしょうか? この説明は私には奇妙に聞こえる..

4

5 に答える 5

8

ここには特効薬の答えはありません。特定のアプリケーションにどちらを使用するかを決定する前に、それぞれの長所と短所を知る必要があります。

InnoDB:

  • FKをサポート
  • トランザクションをサポート
  • 操作に大きなメモリ バッファを使用する
  • 行レベルのロックをサポート
  • ただし、メンテナンス コストがはるかに高くなります。実際には、メモリ使用量を調整したり、テーブル ファイルを構成したりする必要があります。

MyISAM:

  • 次のような InnoDB にはない特別な列機能がたくさんあります。
    • 全文索引
    • 空間列 (これは InnoDB では機能しないと確信しています)
  • 主要な読み取り/追加のユースケースでは非常に高速 (更新、削除ではテーブルをロックしますが、挿入ではロックしません)
  • また、通常はより高速な挿入があります
  • インデックスをメモリ (キー バッファー) にキャッシュしますが、実際のデータ ページのバッファー処理は OS に依存します。

たとえば、e コマース、ユーザー データベースなど、トランザクションを使用したいものには InnoDB を使用します。

データ ウェアハウス、ログ記録、レポート作成などには、おそらく MyISAM を使用します。

于 2009-10-29T23:35:43.150 に答える
4

InnoDB に対する MyISAM の利点をいくつか挙げる必要がありました

  1. 全文検索

  2. ...

  3. いいえ、それだけです。

(OK、 MyISAM が InnoDB よりも高速場合もありますが、ACID 準拠の欠如を我慢する価値があるほど十分ではありません。今日、MyISAM で何かを行う主な理由は、悲しいことに InnoDB ではサポートされていない全文検索を取得することです。 InnoDB.)

于 2009-10-29T23:10:53.947 に答える
1

これが真実ではないかどうかはわかりませんが、MyISAM は InnoDB よりも読み込みが高速です。

また、MyISAM テーブルは別のファイルに保存され、(私が覚えている限りでは)実際にそれらのファイルを別の MySQL データベースに転送することができ、バックアップも簡単です。

デフォルトでは、InnoDB データベースはファイル システム上の 1 つの巨大なグロブに格納されます。

なぜ今でも広く使われているのかというと、デフォルトのオプションだからだとずっと思っていました。個人的には、InnoDB の利点は MyISAM を圧倒し、MyISAM にはデータの整合性の問題もあると私は信じています。

于 2009-10-29T23:02:23.697 に答える
0

Mysql Peformanceブログを読む必要があります。

于 2009-10-30T06:06:21.277 に答える
0

確かに、外部キーなしで InnoDB テーブルを作成できますが、それでは主な利点の 1 つである参照整合性が失われます。ただし、MyISAM は参照整合性を目的として構築されていないため、テーブルのキーは別の方法で格納でき、おそらくより効率的に格納できます。

ロックとアクセスにもいくつかの違いがあります。InnoDB は行レベルのロックをサポートしていますが、MyISAM はテーブルレベルのロックのみをサポートしています。実行しているクエリ (SELECTS と INSERTS/UPDATES) によっては、これがパフォーマンスに顕著な影響を与える可能性があります。

于 2009-10-29T22:47:37.657 に答える