民间,
主表城市中有2500条记录,大约有参考文献。 22另一个表格作为城市ID或城市名称。
现在我将不得不从城市主表中删除2000条记录并在另外22个存在城市ID的表中进行交叉检查,如果存在引用,则修改ID。
我在PHP中创建了一个简单的脚本,但是花了15-16个小时,我在生产服务器上做不到。所有22个表平均有700,000到800,000行。
请提供最佳解决方案。
由于
答案 0 :(得分:2)
好吧,这是一个黑暗中的镜头,但这里是:
一次删除一个城市。因此,对于每个城市,更新所有其他22个大型表。整体速度会较慢,但会以较小的块(16小时的1/2500秒〜= 20-25秒)执行。更新表后,从主城市表中删除该行。冲洗并重复约2500次。
答案 1 :(得分:0)
我在PHP中创建了一个简单的脚本但是花了15-16个小时而且我在生产服务器上做不到这个
如果很简单那么为什么不在这里贴出来?在不知道您的算法和数据模式的情况下,我们无法猜测最佳算法是什么。
当然,您应该已经确保为查询使用了适当的索引并且调整了mysql实例(您可能应该配置比默认值更多的sort_buffer,repair_threads,thread_cache和max_sort_file_size)。
通常,在SQL而不是PHP中完成批量操作会更快。在删除主记录之前更改外键引用可能要简单得多(不要在处理期间没有破坏数据的完整性)。