我处于需要删除表中的整个列(用于用户 token )的情况,即同时重置所有用户 token 。有两种解决方法:使用单独的 UPDATE 查询分别重置每个用户的 token ;或者进行一个影响所有行的大查询。
一个大查询的优点是它显然会快得多,但我担心数据库很大时大型 UPDATE 查询的影响。查询过程中发生的请求是否会受到影响?
最佳答案
恐怕没那么简单。即使启用脏读,运行一次大更新也有很多缺点:
- 更新一列的长时间运行的事务将有效地阻止其他插入、更新和删除事务。
- 长时间运行的事务会导致磁盘巨大 负载,因为服务器必须将正在发生的所有事情写入日志文件,以便您可以回滚该巨大的事务。
- 如果事务失败,您将不得不完全重新运行它,它是不可重新启动的。
因此,如果同时要求可以解释为“在一批中可能需要一段时间才能运行”,我会选择批处理。一篇关于 MySql 中 DELETE 性能的很好的研究文章在这里:http://mysql.rjweb.org/doc.php/deletebig ,而且我认为大部分发现都适用于 UPDATE。
诀窍在于找到最佳“批量大小”。
批处理的额外好处是您可以使此过程对故障具有弹性并且易于重新启动。
关于mysql - 许多单独的查询 v. 一个大的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505415/