1

key1 と str_key の両方が一意でないキーを持つ、それぞれ 1 億行の 2 つのテーブルがあります。次の MYSQL クエリは、show engine innodb status によると、約 80 回の読み取り/秒を実行していますが、まだ更新されていません。他のクエリは実行されていません。

update table_r r, table_w w set r.key1=0 where r.str_key=w.str_key
  1. クエリが完了するまでに 1 億 / 60 > 100 万秒かかるというのは正しいですか?
  2. クエリを最適化してすばやく終了するにはどうすればよいですか?
4

2 に答える 2

0

テーブル内の WHERE 句フィールドにインデックスを付ける必要があり、1 億行でテーブルを分割する必要があります。適切に行うと、すべてのクエリが非常に高速に実行されます。

このドキュメントが役立つ場合があります。

パフォーマンスの観点からは、MySQL 5.1 パーティショニングが強力な新しいツールであり、多くの物理データベース設計で使用してパフォーマンスを劇的に改善し、DBA の管理負担を軽減できることが重要です。MySQL パーティショニングの詳細については、 http://dev.mysql.com/doc/refman/5.1/en/partitioning.htmlのオンライン リファレンス マニュアルにアクセスし、MySQL フォーラムにアクセスしてください。http://forums.mysql.com/list.php?106で参照できます。

于 2013-05-19T04:33:52.003 に答える
0

クエリが遅いときは常に、最初に行うことは、WHERE 句で言及されているすべての列にインデックスがあることを確認することです。

于 2013-05-19T02:30:43.550 に答える