Mysql 许多个人的疑问。一个大的
我所处的情况是,表中的整列(用于用户令牌)需要擦除,即所有用户令牌同时重置。有两种方法:使用单独的更新查询分别重置每个用户的令牌;或者进行一个影响所有行的大查询Mysql 许多个人的疑问。一个大的,mysql,database,performance,database-performance,Mysql,Database,Performance,Database Performance,我所处的情况是,表中的整列(用于用户令牌)需要擦除,即所有用户令牌同时重置。有两种方法:使用单独的更新查询分别重置每个用户的令牌;或者进行一个影响所有行的大查询 一个大查询的优点是它显然会快得多,但我担心当数据库很大时,一个大的更新查询会带来什么影响。查询期间发生的请求是否会受到影响?答案取决于您建立的事务和隔离级别 您可以将隔离设置为允许“脏读”、“幻象读”或强制读写序列化 无论您如何进行更新,您都希望它是一个单一的工作单元 我建议最小化网络延迟,并在一次网络往返中更新所有用户令牌。这意味着要
一个大查询的优点是它显然会快得多,但我担心当数据库很大时,一个大的更新查询会带来什么影响。查询期间发生的请求是否会受到影响?答案取决于您建立的事务和隔离级别 您可以将隔离设置为允许“脏读”、“幻象读”或强制读写序列化 无论您如何进行更新,您都希望它是一个单一的工作单元
我建议最小化网络延迟,并在一次网络往返中更新所有用户令牌。这意味着要么编写一个查询,要么将多个查询批处理到一个请求中。恐怕没那么简单。即使启用脏读,运行一个大型更新也有很多缺点:
- 更新一列的长时间运行事务将有效阻止其他插入、更新和删除事务李>
- 长时间运行的事务会导致磁盘上的enourmous负载,因为服务器必须将正在发生的一切写入日志文件,以便您可以回滚那个巨大的事务李>
- 如果事务失败,您必须完全重新运行它,因为它不可重新启动李>
批处理的另一个好处是,您可以使此过程具有故障恢复能力,并且可以友好地重新启动。批处理……比如说,一次10000行。。。。