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,寻找重复项,或者仅仅是用户问题,以避免两次上传相同的文件。
还有其他完全不同的工作方法来解决问题吗?
答案 0 :(得分:1)
第一件事。你是这样做的吗?
直到
读取行 - 将数据保存到DB;
阅读下一行
如果是这样的话......先做一次"一次"。
收集所有行,将其拆分为负担得起的Update语句块并大量运行它们。
这将为您节省很多时间。
重复 - 如果我遇到了大的性能问题 - 我会按原样添加所有内容并使用cron任务来清理表格。
答案 1 :(得分:0)
我找到了一个解决方案,对于速度问题,我索引所有列,我得到了" WHERE"在我的PHP脚本中,我没有更改任何sql命令,它将执行时间从15分钟缩短到10秒。