2010-08-11 66 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使用表鎖定

「我會假設行級鎖定更好,因爲「[你鎖定的數據少]。

在此頁面中,首先「更好」的定義很差。看起來好的意思是「更快」。

由於爭用鎖,行級鎖定不能(通常)更快。鎖定大型結果集的每一行意味着與另一個大型結果集查詢和回滾發生衝突的真實可能性。