2012-03-27 14 views
2

私は、約2百万の製品に関する製品価格情報の束を持つMySQLテーブルを持っています。毎日、価格情報が変更された製品(巨大な痛み)について、この情報を更新する必要があります。大規模なMySQLテーブルの毎日の更新?

これらの変更を処理する最善の方法は、変更された製品がcompare and updateのようなものではないのですか?あなたが一括更新のために

+0

これは、製品の変更をどのように検出/追跡しているかによってまったく異なります。 – nnichols

+0

正直言って問題の一部です。私は確信していません。私は歴史的な価格情報を気にしません。ライブテーブルの既存の情報を一括更新することしかできません[おそらく、おそらく何らかの一時的な複製、比較、更新、または何かを介して] – Andy

+0

どうやって変更を受け取りますか?彼らはどこから来ているのですか?固有の識別子は何ですか?あなたのテーブル構造は何ですか? – nnichols

答えて

3

を提供することができます

愛のアドバイスは、あなたは間違いなく、むしろ小さな更新ステートメントの多くよりもLOAD DATA INFILEを使用する必要があります。

まず、一時的なテーブルに新しいデータをロードする:あなたはまた、あなたがしている同じファイルからINSERT新しいレコードにしたい場合は

UPDATE products, bar SET products.info = bar.info WHERE products.productid = bar.productid; 

LOAD DATA INFILE 'foo.txt' INTO TABLE bar (productid, info); 

は、その後の更新を実行します既存のテーブルに一致するIDを持たないすべてのレコードをSELECT INTO OUTFILEから更新し、そのアウトファイルをLOAD DATA INFILEを使用して商品テーブルにロードすることができます。

2

私は数百万の価格と価格比較エンジンを維持し、私はソースで見つけた各行を選択し、各行を個別に更新します。行がない場合は挿入します。これを高速化するためにInnoDBトランザクションを使用するのが最善です。

これはすべて、ソースファイルを解析してテーブルを更新する方法を知っているPHPスクリプトによって行われます。

関連する問題