0

我想从Excel中插入数据到MySQL使用PHP但我需要一些验证之前推送数据到真正的表。我试过2个选项,这两个选项都适用于我。Excel加载到MySQL - 性能

选项1
读取数组中的excel数据。循环数组,获取每个值并对数据进行验证。然后插入到真实的表格中。
选项2
将数据批量加载到临时表中db。调用一个程序并进行适当的验证。一旦验证完成,将数据从临时表移动到真正的表。

我知道这两个选项都是可以实现的,但我更关心性能。有没有人知道哪一个表现更好?换句话说,可以执行得更快。任何建议或参考链接高度赞赏。

+0

选项2会更快。 – Surya

+1

如果不知道您需要进行哪种验证,则无法回答。 – rlanvin

+1

选项#3 ....如果可能的话,一次读取一行中的Excel数据,验证并插入数据库.....保存在内存中构建数组的所有内存开销。使用预准备语句也有帮助,因为你只需要准备一次语句,并且只需绑定每个插入的变量 –

回答

1

我不知道如果验证您的每行Excel数据行会更快,但它会节省您存储在内存中的数组。

取的Excel行 - >验证行 - >插入到数据库

我个人不喜欢批量插入。

+0

Mark Ba​​ker在评论中打败了我。 – 2015-08-28 09:16:26

+0

我有超过10k或行。你建议我阅读excel并逐一验证所有行? –

+0

@ chinna_82这正是他们所建议的,这是一个非常可靠的方法,只要您的验证只需要一行。 – rlanvin

0

如果您想要速度,请不要一次处理一行。相反,使用SQL擅长的 - 将相同的东西应用于值的数组(表)。

假设您想将空字符串变为NULL,列foo。这将为整个表做到这一点:

UPDATE tbl SET foo = NULL WHERE foo = ''; 

简单。快速。非常有效。

从数字中删除美元符号和昏迷。例如,$1,234.56 - >1234.56

  1. 读入VARCHAR,而不是数字字段。
  2. 拥有(或添加)带有数字字段的列,如DECIMAL(11,2)

然后,

UPDATE tbl SET amt = REPLACE(REPLACE(amt_str, ',', ''), '$', ''); 

如果您正在使用LOAD DATA,你可以两者都做的语句内这些例子。 (并避免额外的列。)