2010-08-11 34 views

回答

17

从(预编辑)link

便宜

比页级或表级锁慢桌子上的很大一部分使用,因为你必须获取更多的锁

使用行级锁,如果你只打一两行的时候。如果您的代码碰到很多或未知的行,请坚持使用表锁。

+4

我明白了。因此,如果它更像“对于大型结果集,表锁定通常比行锁定更好”或许会更好。 – 2010-08-11 21:32:14

0

A row 对于发生重大数据修改的大型表格,表级锁定效果更好。这可以让系统与桌面上的单个锁进行竞争,而不必处理巨大的锁(每行一个锁)。

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

+0

我认为你的意思是“表锁越好.....” – SQLMenace 2010-08-11 20:47:22

+0

我认为你的意思是“一排锁更好......”:P – 2010-08-11 20:49:03

+0

*(羞怯的笑容)*是的,我的意思是表.. – 2010-08-11 20:58:22

0

一般来说,如果你需要锁定了大量的数据,那么1锁定在一个大表比行级锁或页锁一大堆

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

  • 有权获得更多的锁与行锁定,这花费更多的资源

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;
    • 选择具有并行的INSERT语句,极少UPDATE和DELETE语句结合。
    • 许多扫描或GROUP BY操作在整个表上没有任何作家。
1

表锁定使许多会话在同一时间

从表中读取要达到很高的锁定速度,MySQL使用表锁定

“我会假设行级锁定更好,因为“[你锁定的数据少]。

在此页面中,首先“更好”的定义很差。看起来好的意思是“更快”。

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