UPDATE
我有一个服务器每 3-5 秒向一个单独的 MySQL 服务器发送多达 20 条语句来进行游戏。我的问题是,将它们连接在一起是否更快(UPDATE;UPDATE;UPDATE
)。在事务中执行它们然后提交事务是否更快?单独做每一个会更快UPDATE
吗?
任何见解将不胜感激!
UPDATE
我有一个服务器每 3-5 秒向一个单独的 MySQL 服务器发送多达 20 条语句来进行游戏。我的问题是,将它们连接在一起是否更快(UPDATE;UPDATE;UPDATE
)。在事务中执行它们然后提交事务是否更快?单独做每一个会更快UPDATE
吗?
任何见解将不胜感激!
这有点取决于服务器的连接方式。如果服务器之间的连接是持久的,那么连接语句或多个单独语句之间可能不会有很大差异。
但是,如果执行涉及到建立连接,执行SQL语句,然后断开连接,一次执行多条语句会节省数据库服务器的大量资源。建立连接的过程往往是一项昂贵且耗时的过程,并且由于机器是独立的,因此会增加 DNS 解析的开销。
建立连接、开始事务、单独执行语句、提交事务并断开与数据库服务器的连接对我来说是最合乎逻辑的。在这种情况下,无论您将所有UPDATE
语句作为单个连接还是多个单独语句发送都可能不会产生太大影响,尤其是如果这仅涉及这两个服务器之间的定期通信并且您不需要期望它会随着用户负载而扩展, 例如。
事务的使用假设您的 3-5 秒周期性突发UPDATE
语句在逻辑上以某种方式相关。如果它们不是相互依赖的,那么您可以跳过事务以节省一些资源。
与任何有关性能的问题一样,最好的答案是,如果您当前的系统满足您的性能和扩展需求,您现在不应该过多关注对其进行微优化。
将这些更新包装到单个事务块中总是更快。这样做的代价是,如果该块内发生任何故障,那将是什么都没有发生——你将不得不再次重复你的工作。
另外,请记住 MySQL 中的事务仅在使用 InnoDB 引擎时才有效。