Почему блокировка на уровне таблицы лучше, чем блокировка на уровне строки для больших таблиц? - PullRequest
30 голосов
/ 12 августа 2010

Согласно руководству MySQL :

Для больших таблиц блокировка таблиц часто лучше блокировки строк,

Почему это так?Я бы предположил, что блокировка на уровне строк лучше, потому что, когда вы блокируете таблицу большего размера, вы блокируете больше данных.

Ответы [ 5 ]

22 голосов
/ 12 августа 2010

из (до редактирования) ссылка

Медленнее, чем блокировки на уровне страницы или на уровне таблицы при использовании в большой части таблицы, поскольку необходимо получить многобольше блокировок

используйте блокировку уровня строки, если вы нажимаете только строку или две.Если ваш код встречает много или неизвестные строки, придерживайтесь блокировки таблицы.

17 голосов
/ 12 августа 2010
  • Для блокировки строк требуется больше памяти, чем для блокировки на уровне таблицы или страницы.

  • Необходимо получить гораздо больше блокировок с блокировкой строк, что увеличивает количество ресурсов

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

  • Преимущества блокировки на уровне строк:

    • Меньше конфликтов блокировки при доступе к различным строкам во многихthreads.
    • Меньше изменений для отката.
    • Позволяет блокировать одну строку в течение длительного времени.
  • Недостатки строки-блокировка уровня:

    • Занимает больше памяти, чем блокировки на уровне страниц или таблиц.
    • Медленнее блокировок на уровне страниц или таблиц, когда используется на большой частитаблицу, потому что вы должны получить гораздо больше блокировок.
    • Определенно намного хуже, чем другие блокировки, если вы часто выполняете операции 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 на всей таблице без каких-либо писателей.
1 голос
/ 12 августа 2010

Блокировка таблицы позволяет одновременно читать несколько сеансов из таблицы

Для достижения очень высокой скорости блокировки MySQL использует блокировку таблицы

«Я бы предположил, что блокировка на уровне строк лучше, потому что» [вы блокируете меньше данных].

Первое «лучше» плохо определено на этой странице. Похоже, что лучше означает «быстрее».

Блокировка на уровне строк не может (вообще) быть быстрее из-за конфликта для блокировок. Блокировка каждой строки большого набора результатов означает вполне реальную возможность конфликта с другим большим запросом набора результатов и откатом.

1 голос
/ 12 августа 2010

A строка Блокировка на уровне таблицы лучше подходит для большой таблицы, в которой происходят значительные изменения данных. Это позволяет системе бороться с одной блокировкой на столе, а не иметь дело с блокировками gazillion (по одной для каждой строки).

СУБД автоматически увеличивает уровни блокировки внутри.

0 голосов
/ 12 августа 2010

В общем, если вам нужно заблокировать много данных, тогда 1 блокировка для большой таблицы дешевле, чем целая куча блокировок на уровне строк или страниц

...