mysql - 事务是否会增加数据库的开销?

标签 mysql database transactions innodb autocommit

在我们的应用程序中围绕每个服务方法放置数据库会增加开销吗?

我们目前只在明确/明显需要的情况下使用数据库事务。我最近建议事务围绕所有服务方法,但其他一些开发人员问了一个谨慎的问题:这会增加开销吗?

我的感觉不是 - 从数据库的角度来看,自动提交与事务相同。但这准确吗?

数据库:MySQL

最佳答案

你是对的,使用自动提交,每条语句都包含在事务中。如果你的服务方法正在执行多个sql语句,最好将它们包装成一个事务。看看this回答更多细节,和here是一篇关于该主题的精彩博文。

回答你的问题,是的,事务确实增加了性能开销,但在你的具体情况下,你不会注意到差异,因为你已经启用了自动提交,除非你在服务方法中有长时间运行的语句,这会导致更长的时间锁定参与事务的表。如果您只是将多个语句包装在一个事务中,您将得到一个事务(而不是每个单独语句的事务),如所指出的here (“启用了自动提交的 session 可以通过使用显式 START TRANSACTION 或 BEGIN 语句启动它并以 COMMIT 或 ROLLBACK 语句结束它来执行多语句事务”)并且您将在服务方法级别上实现原子性......

最后,如果从实现服务方法级别的原子性(我认为您想要实现)的角度来看这有意义的话,我会采用您的解决方案,但是对性能有 + 和 - 的影响,取决于您的查询、请求等...

关于mysql - 事务是否会增加数据库的开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271497/

相关文章:

php - Facebook 好友过滤数据库记录的最佳方式是什么?

postgresql - 如何在大事务下获得高性能(postgresql)

mysql - 有没有办法恢复一个多月前删除的Mysql中已删除的行

mysql - 动态表达式 Groovy SQL 的引用

sql - Postgresql 从多个表中删除多行

database - 带有 jBASE 的 ODBC

mysql - 尝试连接三个表,其中主表与子表没有直接关系

sql - 在事务中更新表(使用 Service Broker 的审计触发器)

mysql - MySQL中处理高负载表的常见做法

php - sql 更新查询未运行