从数据库中删除记录的最佳算法?

时间:2011-08-26 02:34:08

标签: php mysql

民间,

主表城市中有2500条记录,大约有参考文献。 22另一个表格作为城市ID或城市名称。

现在我将不得不从城市主表中删除2000条记录并在另外22个存在城市ID的表中进行交叉检查,如果存在引用,则修改ID。

我在PHP中创建了一个简单的脚本,但是花了15-16个小时,我在生产服务器上做不到。所有22个表平均有700,000到800,000行。

请提供最佳解决方案。

由于

2 个答案:

答案 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中完成批量操作会更快。在删除主记录之前更改外键引用可能要简单得多(不要在处理期间没有破坏数据的完整性)。