有很多更新的MySQL事务

有很多更新的MySQL事务,mysql,transactions,innodb,Mysql,Transactions,Innodb,我有一张有100000张唱片的桌子。 我正在考虑使用事务更新数据。 将有一个查询将一列更新为零,大约5000个更新,每个更新将更新一条记录 这些大型事务的内存含义是什么? 在事务运行时选择数据是否会有任何重大问题 编辑 表是innodb 它是1+5000 和记录由索引的列更新 谢谢你的回答。计划A:2条更新语句-1条用于零,一条用于其他5000条。但也许这并不实际 计划B:不如计划A 5001 UPDATE语句在单个事务中的效率BEGIN…COMMIT 方案C:非常慢的自动提交=1,但没有开始.

我有一张有100000张唱片的桌子。 我正在考虑使用事务更新数据。 将有一个查询将一列更新为零,大约5000个更新,每个更新将更新一条记录

这些大型事务的内存含义是什么? 在事务运行时选择数据是否会有任何重大问题

编辑

表是innodb 它是1+5000 和记录由索引的列更新 谢谢你的回答。

计划A:2条更新语句-1条用于零,一条用于其他5000条。但也许这并不实际

计划B:不如计划A 5001 UPDATE语句在单个事务中的效率BEGIN…COMMIT

方案C:非常慢的自动提交=1,但没有开始..提交

没有人有记忆问题。但是,建议将innodb_buffer_pool_大小设置为可用RAM的70%左右

如果缓存了所有必要的块(可能是几十个或数千个),那么计划A或B可能需要几秒钟。根据innodb的一些设置,方案C可能需要几分钟的时间


SELECT不应受到任何方法的太大影响。由于行级锁的交互作用,可能会产生一些影响。您可能不会注意到影响。

您是否尝试在服务器上运行此功能?答案纯粹是猜测,因为我们不知道您的服务器规格/架构或MySQL设置。有人假设这5000个更新是在一个循环中执行的,在这种情况下,每次迭代中写入的值是可编程确定的?如果是这样的话,该程序是否可以生成一个可以放在单个UPDATE命令中的表达式?听起来好像您试图将SQL作为一种过程语言来使用,而实际上它是一种声明性语言。是的,这些更新是在一个循环中执行的。数据由XML文件确定。我应该在什么时候结束用例?这种语法会以什么方式使它更好?MyISAM?还是InnoDB?1交易?2.1+5000交易?按主键更新?其他钥匙?请提供显示创建表和样本更新。我已经更新了我原来的帖子。