为什么表级锁定比大型表的行级锁定更好?

时间:2010-08-11 20:42:13

标签: mysql locking table-locking

根据MySQL manual

  

对于大型表,表锁定通常比行锁定更好,

这是为什么?我认为行级锁定更好,因为当您锁定更大的表时,您将锁定更多数据。

5 个答案:

答案 0 :(得分:22)

来自(编辑前)link

  

在表的大部分上使用时比页级或表级锁慢,因为你必须获得更多的锁

如果您只打一两行,请使用行级锁定。如果您的代码遇到许多或未知的行,请坚持使用表锁。

答案 1 :(得分:16)

  • 行锁定比表或页面级锁定需要更多内存。

  • 必须获得更多具有行锁定的锁,这会消耗更多资源

来自http://www.devshed.com/c/a/MySQL/MySQL-Optimization-part-2/

  • 行级锁定的优点:

    • 访问许多线程中的不同行时,锁定冲突更少。
    • 回滚的更改次数减少。
    • 可以长时间锁定一行。
  • 行级锁定的缺点:

    • 占用的内存多于页面级或表级锁。
    • 在表的大部分上使用时比页级或表级锁慢,因为你必须获得更多的锁。
    • 如果您经常对大部分数据执行GROUP BY操作,或者您经常必须扫描整个表格,那么肯定比其他锁定更糟糕。
    • 使用更高级别的锁,您还可以更轻松地支持不同类型的锁来调整应用程序,因为锁开销小于行级锁。
  • 在以下情况下,表锁优于页级锁或行级锁:

    • 该表的大多数陈述都是读数。
    • 读取和更新严格键,您可以在其中更新或删除可以使用单个键读取的行: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value;
    • SELECT结合并发INSERT语句,以及极少数UPDATE和DELETE语句。
    • 整个表上的许多扫描或GROUP BY操作,没有任何编写者。

答案 2 :(得分:1)

对于正在进行主要数据修改的大型表,表级锁定更好。这使得系统可以在桌面上使用单个锁,而不必处理大量的锁(每​​行一个)。

RDBMS会自动在内部升级锁定级别。

答案 3 :(得分:1)

  

表锁定允许多个会话同时从表中读取

     

为了实现非常高的锁定速度,MySQL使用表锁定

“我认为行级锁定更好,因为”[锁定较少的数据]。

首页“更好”在此页面中定义不明确。似乎更好意味着“更快”。

由于争用锁定,行级锁定(通常)不能更快。锁定大型结果集的每一行意味着与另一个大型结果集查询和回滚发生冲突的真实可能性。

答案 4 :(得分:0)

一般情况下,如果你需要锁定大量数据,那么大表上的1个锁比一大堆行级或页锁更便宜