这是 Transaction isolation levels relation with locks on table 的后续问题
我想知道隔离级别之间的速度差异。您可以在级别之间切换获得哪些速度优势?与另一个相比,您能否证明这些中的每一个何时会导致锁定等待?
我也想知道:做这个更新查询:
UPDATE product SET sold = 1 WHERE id = 10 AND sold = 0;
如果有人在执行查询期间修改标志 sold
,它会对这些获取级别产生不同的结果吗?
最佳答案
间隙锁定 是 READ COMMITTED 和 REPEATABLE READ 之间的一个常见区别。如果您有并发查询争用相同的间隙锁,这可能会影响锁等待时间。
在您显示的UPDATE
查询中,假设id
是主键,查询应该使用主键索引来选择单行,因此不会有该查询的间隙锁。
回复你的评论:
锁定对性能没有影响。如果查询必须等待获取查询所需的锁,锁等待可能会延迟执行的开始,但一旦开始执行,它将在任何事务隔离级别中具有相同的性能。 p>
此外,如果没有任何并发查询持有所需的锁,则不会有额外的等待锁。
关于MySQL 隔离级别性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217095/