InnoDB优化 - "在进行更新时使用事务" - 为什么?

bcm*_*cfc 5 mysql optimization innodb

我在MySQL性能博客上阅读这篇文章.

在应用程序调整下,它说:

首先确保在进行更新时使用事务

我目前只在同时有多个插入或更新的地方使用事务.即多个表.

因此,我是否应该改变每一个UPDATE将其变为交易?

有什么区别:

prepare sql
bind params
commit
Run Code Online (Sandbox Code Playgroud)

和:

begin transaction
prepare sql
bind params
execute statement
commit transaction
Run Code Online (Sandbox Code Playgroud)

就数据库级别的情况而言,哪一个比另一个更快?

Mch*_*chl 6

InnoDB默认以自动提交模式运行.这意味着每个查询都在它自己的事务中运行并立即被提交.在InnoDB中,这意味着将数据写入磁盘上的两个位置(不要向我询问详细信息 - 我正在从内存中写入我在MySQL性能博客上读过的内容;)).

现在,如果你一次进行一次更新/插入/删除,那么获得的性能就不会太高.但是,如果连续执行多次更新/插入/删除操作,可以通过将它们捆绑到事务中来节省一些硬盘时间,然后立即提交所有内容.

  • +1.更多技术分析:有一个缓冲区延迟写入日志(innodb_log_buffer_size),如果你一直提交,需要更频繁地刷新,导致性能更差.缓冲区也会每1秒自动刷新一次. (2认同)