循环通过100万条记录更新,其中VS更新sql的地方为IN

时间:2015-09-25 03:44:33

标签: php mysql sql-server performance where-clause

我有200多万条记录表。

我可能需要更新;说100万条记录;

在两个以下之间效率更高:

  1. 循环播放数百万条记录并运行更新查询,其中id = id百万次?
    1. 获得所有百万ids并使其崩溃;并在WHERE id IN(id1,id2,..... id100000)
    2. 的单个更新查询中使用它

      有专家可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

通常情况下,您建议的选项1将比选项2慢,但是选项2将占用更多内存并且可能会阻止您的桌面几分钟......

这真的取决于你的数据库架构和上下文(它是在Dev或Prod服务器上吗?它是一个你需要重复的操作吗?等等),但我会选择第三种选择:

  1. 按批次更新:例如,您可以每10000次更新10000行(更新前10000行,然后更新10000行等)
  2. 10000显然是一个例子,正如Dagon在他的评论中所建议的那样,如果可以,你应该测试不同的选项。

    注意:关于你的选项2,你应该考虑一个比你想要在IN中更新的所有ID更好的WHERE子句(例如,你可以使用你在这里使用的相同条件:&#34; < em>获取所有百万个ID并将其内爆; &#34;)