我有一个超过200万条记录的表。
我可能需要更新;例如100万条记录;
- 循环百万条记录并运行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并内拆它;")