Подтвердить что ты не робот

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

В соответствии с руководство по MySQL:

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

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

4b9b3361

Ответ 1

из ссылки (pre-edit)

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

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

Ответ 2

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

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

От 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 на всей таблице без каких-либо авторов.

Ответ 3

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

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

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

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

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

Ответ 4

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

RDBMS автоматически увеличивает уровни блокировки внутри.

Ответ 5

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