Mysql 执行多个UPDATE语句的正确方法是什么?

Mysql 执行多个UPDATE语句的正确方法是什么?,mysql,optimization,Mysql,Optimization,我有一个服务器,它每3-5秒向一个单独的MySQL服务器发送多达20条更新语句。我的问题是,将它们结合在一起是否更快(UPDATE;UPDATE;UPDATE)。在事务中执行这些操作是否比提交事务更快?单独执行每个更新是否更快 如有任何见解,将不胜感激 这在某种程度上取决于服务器的连接方式。如果服务器之间的连接是持久的,那么您可能不会看到串联语句或多个单独语句之间有太大的差异 但是,如果执行涉及建立连接、执行SQL语句,然后断开连接,那么一次执行多个语句将节省数据库服务器上的大量资源。建立连接的

我有一个服务器,它每3-5秒向一个单独的MySQL服务器发送多达20条更新语句。我的问题是,将它们结合在一起是否更快(
UPDATE;UPDATE;UPDATE
)。在事务中执行这些操作是否比提交事务更快?单独执行每个
更新
是否更快


如有任何见解,将不胜感激

这在某种程度上取决于服务器的连接方式。如果服务器之间的连接是持久的,那么您可能不会看到串联语句或多个单独语句之间有太大的差异

但是,如果执行涉及建立连接、执行SQL语句,然后断开连接,那么一次执行多个语句将节省数据库服务器上的大量资源。建立连接的过程往往是一个昂贵且耗时的过程,并且由于机器是分开的,因此增加了DNS解析的开销


对我来说,建立连接、开始事务、单独执行语句、提交事务以及断开与数据库服务器的连接最符合逻辑。无论您是将所有
UPDATE
语句作为单个连接还是多个单独语句发送,在这种情况下可能不会有太大的区别,特别是如果这只是涉及这两个服务器之间的常规通信,并且您不必期望它随用户负载而扩展

事务的使用假设3-5秒周期性的
UPDATE
语句在逻辑上是相关的。如果它们不是相互依赖的,那么您可以跳过事务以节省一些资源


与任何有关性能的问题一样,最好的答案是,如果您当前的系统能够满足您的性能和扩展需求,那么您现在还不应该太注意对其进行微观优化。

将这些更新打包到单个事务块中总是更快。 这样做的代价是,如果在该区块内发生任何故障,那么将是什么也没有发生——您将不得不再次重复您的工作


另外,请记住,MySQL中的事务只有在使用InnoDB引擎时才起作用。

我删掉了您使用的非查询术语,因为这会向许多读者暗示option或variable setting之类的语句。我只是将它们称为
UPDATE
语句。“对我来说,建立连接、开始事务、单独执行语句、提交事务并断开与数据库服务器的连接是最合乎逻辑的。”——奇怪的是,为什么要开始事务?这会增加一些开销,但如果查询是独立的,那就不值得了,是吗?@zerkms它们是独立的吗?我对OP的理解是,它们是逻辑分组的,这对我来说意味着事务。我将在上面添加一个注释。“单独执行每个更新是否更快?”---如果OP接受“单独”执行这些更新,那么它们是独立的。我们在RDS实例上看到一些cpu资源过度使用的情况。亚马逊RDS微实例。因此,我们正试图找到优化的地方,以便在微实例中停留更长的时间。我们最终将需要离开微型电脑,但为了成本,我们会尽可能长时间地留在微型电脑中。它们是多人玩家的个人更新。我不知道在这种情况下,交易是否有意义