0

そのため、約40GBのデータをinnodbテーブルに挿入する必要があるという大きな更新があります。かなり時間がかかるので、どちらの方法が最速になるのか疑問に思います(さらに重要なのは、分割テストを実行できるので、なぜか)。

方法1)

a)すべての行を挿入しますb)ALTER TABLE su_tmp_matches ADD PRIMARY KEY(id)を作成します

方法2)

a)ALTER TABLE su_tmp_matches ADD PRIMARY KEY(id)b)すべての行を挿入します

現在、方法1を使用していますが、ステップb)にはかなりの時間がかかるようです。だから私はここでサイズの意味があるかどうか疑問に思っています(40GB-5百万行)。

----だから私もこれをテストすることにしました---かなり速い真新しいmysqlサーバー-RAMのロードとロード、そして高速RAM、高速ディスクも同様に、そしてかなり調整されています(毎秒5000以上のリクエストがあります一枚で):

1,6mio行/6GBデータ:

プライマリインデックスを「削除」するための81秒

プライマリインデックスを「追加」するための550秒(データが追加された後)

データ挿入の前にプライマリインデックスを作成してテーブルのコピーを作成するための120秒

プライマリインデックスなしでテーブルのコピーを作成するのに80秒(その後作成するのに550秒)

かなりばかげているようです-質問は、インデックスが同じものであるかどうかです。

4

1 に答える 1

3

ドキュメントから:

InnoDBには、MyISAMストレージエンジンのように個別のインデックスを作成するための特別な最適化はありません。したがって、テーブルのエクスポートとインポート、および後でインデックスを作成するための費用はかかりません。テーブルをInnoDBに変更する最も速い方法は、InnoDBテーブルに直接挿入することです。

挿入の前に単一性の制約を追加すると、主キーを持つ列が自動インクリメントされた整数である場合にのみエンジンが役立つように思われます。しかし、私は本当に顕著な違いがあるのではないかと疑っています。

便利な推奨事項:

大きなテーブルの変換中に、InnoDBバッファープールのサイズを増やして、ディスクI / Oを物理メモリの最大80%に減らします。InnoDBログファイルのサイズを増やすこともできます。

編集:経験上、MySQLはドキュメントから期待どおりにパフォーマンスを発揮するとは限らないため、これに対して行うベンチマークは、それ自体が明確な答えでなくても、興味深いものになると思います。

于 2012-06-20T14:05:28.863 に答える