0

有一个性能问题,我坚持使用基于 PHP 和 MySql 的应用程序。该应用程序用于数据迁移,其中必须上传数据,并且在经过各种处理(清除外来字符、重复检查、生成 ID)后,必须将其插入到一个中央表中,然后再插入到 5 个不同的表中。在那里,会生成一个 id,并且该 id 必须更新到中央表。有不同的记录集和验证规则。我面临的问题是,当我插入 say(4K) 行文件(包含 20 列)时,它在 15 分钟内工作正常,它被插入到任何地方。但是,当我再次插入相同的记录时,此时插入需要一个小时(理想情况下,它应该通过将先前插入的数据标记为重复来插入)。浏览日志文件后,我注意到有一个 Mysql 选择语句,我在其中检查重复项并获取重复的 ID。然后我在 for 循环中调用一个函数,它基本上是将记录插入 5 个表并将 id 更新到中央表。这个调用函数是整个过程的主要时间。PS记录必须逐条插入记录..请提出一些解决方案..

//这是示例代码

$query=mysql_query("SELECT DISTINCT p1.ID


FROM table1 p1, table2 p2, table3 a
WHERE p2.datatype =0
AND (p1.datatype =1 || p1.datatype=2)
AND p2.ID =0 
AND p1.ID = a.ID
AND p1.coulmn1 = p2.column1
AND p1.coulmn2 = p2.coulmn2
AND a.coulmn3 = p2.column3");
$num=mysql_num_rows($query);
for($i=0;$i<$num;$i++)      {
$f=mysql_result($query,$i,"ID");
//calling function
RecordInsert($f);
}
4

1 回答 1

0

如果没有您的代码,我只能为您提供解决方案的一般指南。基本上,在开始插入之前获取所有现有值。插入时,检查此缓存列表以查看是否存在重复,而不是进行查询。插入后,将插入的项添加到缓存项列表中,以防它再次出现。如果您的表可能会在脚本运行时添加到脚本之外,那么只需锁定您正在使用的表,直到完成。

于 2012-11-23T15:26:20.523 回答