MYSQL:将数据大量更新到现有表中

时间:2014-02-27 02:36:32

标签: mysql perl

我将数据上传到mysql db时遇到了巨大的性能问题。举个例子,我有一些特殊的工具可以说成千上万的人的个人信息。

我有一个工具可以挖掘人们的电话号码。另一个地雷说人民的家庭住址。另一个人挖掘了这个人的照片。因此,对于这个例子,说A国有10万人。我将不得不在以后挖掘来自不同国家的数据。这些采矿工具将在不同时间完成。电话号码的挖掘需要20分钟。挖掘照片需要1周时间。挖掘地址需要3天。

客户希望在现有表/ db中尽快查看数据。我写了一些脚本来检测一个工具何时完成开始逐行上传数据。但是,这似乎花了很长时间(使用UPDATE ...)。

有更快的方法吗?

db中存在的表是这样的结构:

列:ID_COUNTRYID_PERSONFULL NAMEPHONEBLOB_PHOTOADDRESS

1 个答案:

答案 0 :(得分:1)

是的,有更快的方法。通过插入表格,将每个进程的数据放入一个单独的表中。

然后,您必须创建一个查询来收集数据:

select *
from people p left outer join
     phones ph
     on p.personid = ph.perhsonid left outer join
     addresses a
     on p.personid = a.personid left outer join
     photos pho
     on p.personid = pho.personid;

每个表都应该从空开始。当结果可用时,可以使用insert加载表。这至少有两个优点。 (1)插入比更新快,并且批量插入可能更快。 (2)数据在某些表中可用,而不会阻塞插入到其余表中。