代码之家  ›  专栏  ›  技术社区  ›  Binarus

如果事务中没有更改数据,提交与回滚的成本/性能比较

  •  0
  • Binarus  · 技术社区  · 7 年前

    For a writeless transaction which is cheaper/quicker: COMMIT or ROLLBACK? ,这与我的问题类似,但与mssqlserver有关,而且非常旧。此外,这个答案让我有些惊讶,所以我想知道2018年MySQL5.7的情况如何。

    话虽如此:

    假设以下场景:

    • 我已关闭隐式事务。
    • BEGIN 交易。
    • SELECT ... FOR UPDATE
    • 我检查了被选中/锁定的行,得出的结论是数据是正确的,因此。。。
    • ... 我决定 .

    现在我想完成交易。我可以用正常的方法,也就是说,发一个 COMMIT ,在这种情况下,它只会移除锁,或者,作为替代,通过发出 ROLLBACK ,在这种情况下,也只会移除锁。

    这两种方法的结果是一样的,但我的感觉是在成本/性能方面可能有很大的不同。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rick James diyism    7 年前

    (警告:这个答案是有根据的猜测,但可能是错误的。)

    commit/rollback的通常用法是实际进行更改,然后撤消更改。InnoDB是乐观的,因为它假设事务将被提交。也就是说,它最大限度地提高了进行更改(插入、更新等)的效率,同时不优化回滚。因此, ROLLBACK 成本比 COMMIT 结束。

    你的使用不涉及任何实际的变化,所以我会 表现相似。我可能会执行 回降 让未来的读者(包括你自己)明白“什么都没做”。

    由于undo的笨拙部分是行的旧副本,而您的case没有生成这样的副本,所以我看不出有什么区别。

    您的链接指向SQL Server 可能