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

时间:2012-11-03 22:14:02

标签: mysql optimization

我有一台服务器,每3-5秒为一个游戏发送最多20个UPDATE语句到一个单独的MySQL服务器。我的问题是,将它们连接在一起会更快(UPDATE;UPDATE;UPDATE)。在事务中执行它们然后提交事务更快吗?单独执行每个UPDATE会更快吗?

任何见解都将受到赞赏!

2 个答案:

答案 0 :(得分:1)

这取决于服务器的连接方式。如果服务器之间的连接是持久的,您可能不会在连接语句或多个单独语句之间看到很大的区别。

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

对我来说,最合乎逻辑的是建立连接,开始事务,单独执行语句,提交事务以及断开与数据库服务器的连接。是否将所有UPDATE语句作为单个连接或多个单独语句发送可能不会在这种情况下产生重大影响,特别是如果这只涉及这两个服务器之间的定期通信而您不必指望它例如,用户负载扩大规模。

事务的使用假定您的3-5秒定期突发UPDATE语句在某种程度上与逻辑相关。如果它们不相互依赖,那么您可以跳过事务来节省一些资源。

与任何有关性能的问题一样,最好的答案是如果您当前的系统满足您的性能和扩展需求,那么您不应过分关注微优化它。

答案 1 :(得分:1)

将这些UPDATE包装到单个事务块中总是更快。 这样做的代价是,如果在那个区块内发生任何故障,那就什么都不会发生 - 你将不得不重复你的工作。

Aslo,请记住,MySQL中的事务仅在使用InnoDB引擎时才有效。