我刚刚被要求在工作中修复我们的地址DB,因为它非常慢,我不会正常地接近它,因为另一个人照看它但是他现在已经离开我了。
问题是数据库包含5个表,并且在每个表中复制了大量信息,应该有2700万行但是有3000万行,所以重复超过300万行,以及我们的旧IT人员拥有它的方式setup是在有查询时它会搜索所有5个表,并使用php脚本来清除重复的行,因此信息只显示一次。这大大减慢了我们的服务器速度,所以我写了一个PHP脚本,让每一行与一千万其他人进行比较,如果有重复删除它,但是我启动它后2分钟服务器崩溃所以我试过使用php的一些其他脚本但是每当我尝试运行复杂的mysql查询时服务器崩溃。
是否有一种简单的方法可以使服务器崩溃以合并所有表并删除所有重复的条目?
数据库副本
post1 10,044,279 MyISAM latin1_german2_ci 758.1 MiB -
post2 8,328,333 MyISAM latin1_german2_ci 624.7 MiB -
postcode 9,344,317 MyISAM latin1_german2_ci 703.8 MiB -
postcode_nw 1,157,217 InnoDB utf8_unicode_ci 97.6 MiB -
postcode_tmp 1,749,650 MyISAM latin1_german2_ci 50.5 MiB -
答案 0 :(得分:0)
PHP开发人员的一个常见问题是他们忘记了计算机中存在内存等问题
它闻到了#34;好像你试图将所有东西都加载到内存中
你的方法实际上是正确的,它将非常缓慢,但安全。 如果您正确实施。
你不关心速度,因为它是一次性的事情。
答案 1 :(得分:0)
我认为我不能给出明确答案,但我可以给你一些建议:
服务器可能崩溃,因为内存不足。向其添加内存或者可能将数据库上载到具有更大内存的临时AWS服务器以运行复杂查询可能会有所帮助。
您可以考虑使用简单查询来获取数据并在远程计算机上进行比较,而不是让服务器执行繁重的工作。这将需要更长的时间,但最终将完成工作。
也许您可以更改旧的PHP脚本,清除重复项并删除重复项而不是仅显示它们。不会通过所有数据,但它最终会减少重复。然后可以修改这种方法,以便通过循环通过所有数据调用这个较旧的PHP脚本,这样它将捕获未被正常操作清理代码捕获的重复项。