2

データベースにはすでに最大25〜30のテーブルがあり、すべてMyISAMです。これらのテーブルのほとんどは相互に関連しているため、多くのクエリはIDの結合を使用してデータを取得します。

テーブルの1つには700万から1000万のレコードが含まれており、すべてのデータの検索または更新、さらには取得を実行したい場合は遅くなります。今、私は上司に解決策を提案し、テーブルをInnoDBに変換するとパフォーマンスが向上する可能性があると述べました。

また、InnoDBの利点についても説明しました。

  1. とにかくキーで複数のテーブルを結合し、それらは関連しているので、外部キーを使用し、孤立したを回避するリレーショナルデータベースを使用することをお勧めします。大きなテーブルの1つで約10〜15kの孤立した行を見つけ、手動で削除する必要がありました。

  2. トランザクションのサポートでは、時々大きな更新を実行します。途中でいずれかが失敗した場合は、テーブル全体をバックアップされたものに置き換え、更新を再実行して、すべてのクエリが実行されたことを確認する必要があります。InnoDBを使用すると、クエリ2が失敗した場合に、クエリ1からの変更を元に戻すことができます。

上司から受け取った応答は、InnoDBがMyISAMよりも高速に実行されることを証明する必要があるというものです。私の質問は、2つ以上のことが孤立した行を排除することによって、アプリケーション自体の速度を向上させるのではないかということです。

一般的に、MyISAMはInnoDBよりも高速ですか?

注:MySQL5.5を使用する

4

1 に答える 1

5

また、上司に、読み取り/書き込みの両方の負荷がある大きなテーブルに対してInnoDBから得られる最大の利点についても言及する必要があります。テーブルレベルのロックではなく、行レベルのロックが得られます。これは、テーブルロックが解放されるまで多くの待機が発生する場合に、アプリケーションのパフォーマンスを大幅に向上させる可能性があります。

もちろん、上司を説得する最良の方法はそれを証明することです。大きなテーブルのコピーを作成し、テストデータベースに配置します。MyISAMで1つのバージョンのデータを作成し、InnoDBで1つのバージョンのデータを作成します。次に、現在のDB読み取り/書き込みアクティビティを概算するロードミックスを使用して、負荷テストを実行します。それが良いかどうか自分で調べてください。

5.5を使用しているというコメントを更新しました。5.5では、InnoDBを使用するのは簡単です。MyISAMエンジンは基本的に過去数年間改善が見られず、開発努力はInnoDBを中心に行われてきました。InnoDBは、今後選択されるMySQLエンジンです。

于 2013-03-25T16:56:13.077 に答える