2012-05-10 2 views
1

表1:3500万記録 表2:1,6万レコードMySQLの巨大なデータ操作(3000万人以上のdatarecords) - 最も最適な方法

私は表1に更新クエリを実行しています3つの等価性に基づいています。両方のテーブルは、キーなしの純粋なデータ・コルです。

`UPDATE table1,table2 
SET table1.TravelTime=table2.CongestionTime 
WHERE table1.From = table2.From 
AND table1.To = table2.To 
AND table1.Time= table2.Time` 

しかし、この操作は遅くなると思われます。このプロセスをスピードアップする創造的な方法がありますか?

現在、クエリはわずか300回の更新で実行されており、このクエリを完了するのに33時間かかることが示唆されています。

答えて

5

どちらのキーも使用しない純粋なデータ・コラムです。

あなたはちょうどそれを言ったと思います。この量のデータを扱う際には、良いパフォーマンスを得るために索引が必要です。マルチカラム・インデックスを追加する

試してみてください。表1のため

  • (From, To, Time)。表2の
  • (From, To, Time, CongestionTime)

また、外部キー制約を追加することが適切かどうかを検討することもできます。合意

関連資料

+0

すべてのデータがために、テーブルに触れていないように、インデックスとクエリにするために、これをスピードアップするための方法は次のようになります参加する。私はCongestionTimeがテーブル2のインデックスになければならないと思います。 –

+1

@PreetSangha:良い点。それから、それは被覆指数を形成する。私は更新します。 –

+0

したがって、実際にはテーブルを更新する必要がありますか、または作成するインデックスステートメントでクエリを更新するだけですか? – FireFox

関連する問題