我刚被要求修复我们工作中的地址数据库,因为它非常缓慢。我通常不会接触它,因为另一个人负责,但他现在已经离开了,所以这是我的任务。
问题在于,数据库包含5个表,并且每个表中都有很多重复信息。应该有2700万行,但实际上有3000万行,因此有超过300万个重复行。我们以前的IT人员设置查询时会搜索所有5个表,并使用PHP脚本筛选出重复的行,以便只显示一次信息。这使我们的服务器明显变慢,因此我编写了一个PHP脚本来将每一行与其他3000万行进行比较,如果有重复项,则删除它。但是,在我开始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 -