有一个性能问题,我坚持使用我的应用程序,这是基于PHP和MySql。该应用程序用于数据迁移,其中数据必须上载,并在各种过程(清除外来字符,重复检查,id生成)后,必须将其插入到一个中心表中,然后插入到5个不同的表中。在那里,生成一个id,并且必须将该id更新到中心表。有不同的记录集和验证规则。我面临的问题是,当我插入比方说(4K)行文件(包含20列)时,它在15分钟内工作得很好,它被插入到任何地方。但是,当我再次插入相同的记录时,此时需要一个小时才能插入(理想情况下,它应该通过将先前插入的数据标记为重复来插入)。浏览完日志文件后,我注意到有一条Mysql select语句,我在其中检查重复项并获取重复的ID。然后,我在for循环中调用了一个函数,它基本上是将记录插入到5个表中,并将id更新为中心表。这个调用函数是整个过程的主要时间。附注:记录必须一条接一条地插入。请提出一些解决方案..
//这就是示例代码
$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);
}发布于 2012-11-23 23:26:21
没有你的代码,我只能给你一个解决方案的一般指导。基本上,在开始插入之前获取所有现有的值。在插入时,检查这个缓存列表以查看是否存在重复,而不是执行查询。插入后,将插入的项添加到缓存项列表中,以防它再次出现。如果在脚本运行时,您的表可能被添加到脚本之外,那么只需锁定您正在使用的表,直到完成操作。
https://stackoverflow.com/questions/13531835
复制相似问题