2012-03-27 76 views
2

我有一個MySQL表,有大約200萬個產品的一堆產品定價信息。我每天都必須更新這些信息,以便定價信息發生變化的任何產品[巨大的痛苦]。大型MySQL表每日更新?

我想知道處理這些變化的最佳方法是什麼,而不是像compare and update運行的東西,而不是改變了任何產品?

愛任何意見,你可以提供

+0

這完全取決於您如何檢測/跟蹤產品的更改。 – nnichols 2012-03-27 17:09:06

+0

以及那是誠實問題的一部分 - 我不確定。我不關心歷史定價信息 - 只關於批量更新現有表格上的現有信息[或者肯定可能通過一些臨時克隆,比較和更新或其他方式] – Andy 2012-03-27 17:10:13

+0

但是您如何獲取更改?他們來自哪裏?什麼是唯一標識符?你的桌子結構是什麼? – nnichols 2012-03-27 17:15:10

回答

3

對於批量更新,你絕對應該使用LOAD DATA INFILE而不是小了很多更新語句。

首先,新的數據加載到一個臨時表:

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

然後運行更新:

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

如果你也想從你是同一個文件INSERT新記錄您可以從SELECT INTO OUTFILE中更新現有表中沒有匹配ID的所有記錄,然後使用LOAD DATA INFILE將該outfile加載到您的產品表中。

2

我維護一個價格比較引擎,價格上百萬,我選擇每一行,我在源代碼中找到並單獨更新每一行。如果沒有行然後我插入。最好使用InnoDB事務來加快速度。

這一切都是通過一個知道如何解析源文件並更新表的PHP腳本完成的。