上传csv文件时的最佳方法,并检查重复的行

时间:2014-06-04 10:10:23

标签: php mysql sql csv

HI我正在构建一个php页面,我可以从信用卡终端上传一些csv文件,以显示商店的所有者,今天的销售,并做一些统计。 我在我的数据库中使用MYISAM。

这只是csv文件中的一行,用于显示我要使用的信息。

交易日期:22-05-2014 00:00:12;

商店:MCdonalds_denmark;

终端POS:00008101;

Last Oper Num:138;

主机代码:88135;

PAN:4571xxxxxxxxxxx5362;

操作:Authorizazion req;

POS数据代码:5 - ICC;

金额:70;

收单机构:SDID;

交易结果:已批准;

如何避免MySQLi数据库中的重复值,如果用户意外上传csv文件两次,文件名不是真正唯一的,那么我现在用mysql命令检查每一行,如果不存在,但它需要8分钟,当我使用mysqli命令NOT EXIST时上传一个500.000行的csv文件。

我可以看到表格越大,上传速度越慢?而且随着时间的推移,桌子只会变得越来越大。

是否有更好的选择,可能在晚上运行cronjob,寻找重复项,或者仅仅是用户问题,以避免两次上传相同的文件。

还有其他完全不同的工作方法来解决问题吗?

2 个答案:

答案 0 :(得分:1)

第一件事。你是这样做的吗?

直到

读取行 - 将数据保存到DB;

阅读下一行

如果是这样的话......先做一次"一次"。

收集所有行,将其拆分为负担得起的Update语句块并大量运行它们。

这将为您节省很多时间。

重复 - 如果我遇到了大的性能问题 - 我会按原样添加所有内容并使用cron任务来清理表格。

答案 1 :(得分:0)

我找到了一个解决方案,对于速度问题,我索引所有列,我得到了" WHERE"在我的PHP脚本中,我没有更改任何sql命令,它将执行时间从15分钟缩短到10秒。

run indexing on column