2010-08-11 4 views
25

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

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

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

ответ

17

из (предварительного редактирования) link

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

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

+4

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

0

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

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

+0

Я думаю, что вы имеете в виду «Столик блокировки лучше .....» – SQLMenace

+0

Я думаю, что вы имеете в виду «Блочный замок лучше ...»: P –

+0

* (застенчивая усмешка) * Да, я имел в виду Таблицу .. –

0

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

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 использует блокировку таблицы

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

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

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

Смежные вопросы