Почему уровень таблицы блокирует лучше, чем блокировка уровня строки для больших таблиц?

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

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

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

31
задан Brandon 11 August 2010 в 20:45
поделиться

5 ответов

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

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

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

23
ответ дан 27 November 2019 в 22:31
поделиться
  • Для блокировки строк требуется больше памяти, чем для блокировки на уровне таблицы или страницы.

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

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

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

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

    • Требует больше памяти, чем блокировки на уровне страницы или на уровне таблицы.
    • Работает медленнее, чем блокировки на уровне страницы или на уровне таблицы, когда используется на большой части таблицы, потому что вам необходимо установить намного больше блокировок.
    • Определенно намного хуже, чем другие блокировки, если вы часто выполняете операции GROUP BY над большой частью данных или если вам часто приходится сканировать всю таблицу.
    • С блокировками более высокого уровня вы также можете более легко поддерживать блокировки различных типов для настройки приложения, поскольку накладные расходы на блокировку меньше, чем для блокировок на уровне строк.
  • Блокировки таблиц превосходят блокировки на уровне страниц или строк в следующих случаях:

    • Большинство операторов для таблицы считываются.
    • Чтение и обновление строгих ключей, при котором вы обновляете или удаляете строку, которую можно получить с помощью одного чтения ключа: UPDATE tbl_name SET столбец = значение WHERE unique_key_col = key_value; DELETE FROM tbl_name WHERE unique_key_col = key_value;
    • SELECT в сочетании с параллельными операторами INSERT и очень немногими операторами UPDATE и DELETE.
    • Множество сканирований или операций GROUP BY для всей таблицы без каких-либо писателей.
18
ответ дан 27 November 2019 в 22:31
поделиться

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

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

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

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

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

1
ответ дан 27 November 2019 в 22:31
поделиться

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

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

2
ответ дан 27 November 2019 в 22:31
поделиться

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

0
ответ дан 27 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: