循环遍历100万条记录,使用where VS使用where IN更新sql


looping through 1 million records update with where VS update sql with where IN

我有一个超过200万条记录的表。

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

  1. 循环百万条记录并运行where id=id的更新查询百万次?

  • 获取所有百万id并内爆它;并在WHERE id in (id1,id2,.....id100000)
  • 的单个更新查询中使用它有什么专家能帮我吗?

    一般来说,您建议的选项1将比选项2慢,但是选项2将占用更多内存,并且可能会阻塞您的表几分钟…

    这真的取决于你的数据库架构和上下文(它是在Dev或Prod服务器上吗?)你需要再做一次手术吗?等),但我会选择第三个选项:

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


    注意:关于你的选项2,你应该考虑一个更好的WHERE子句,而不是你想要在一个in中更新的所有id(例如,你可以使用与这里相同的条件:"获取所有百万id并内拆它;")