2012-03-27 77 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脚本完成的。