После удаления плюс предел это хорошая идея!

задняя часть
После удаления плюс предел это хорошая идея!

В базе данных, необходимой для бизнес-сценариев, он определенно является хорошей привычкой для операций с одним удалением и обновлением. Например, в выполнении удаления, первый удален, если есть предел 1 в SQL; затем вернитесь, в противном случае полная таблица сканирования является ретровым. Эффективность самоочевидна.

Итак, нужно ли нам выработать привычку добавлять лимит при ежедневном выполнении удаления? Это хорошая привычка?

При ежедневном написании SQL вы использовали следующий SQL при написании операторов удаления?

delete from t where sex = 1 limit 100; 

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

Написано впереди, если это для очистки данных таблицы, рекомендуется использовать усечение напрямую.Эффективность усечения намного выше, чем у удаления.Должно быть, чтобы усечение не запускало транзакции, не блокировало таблицу, и не генерирует большое количество журналов для записи в файл журнала; сразу после усечения таблицы имя_таблицы Освободить место на диске и сбросить значение auto_increment. delete не освобождает место на диске, но последующие вставки перезаписывают ранее удаленные данные. Для получения подробной информации перейдите к другому сообщению в блоге «В чем разница между удалением, усечением и удалением и как выбрать».

Далее обсуждается только сценарий удаления.Во-первых, ключевое слово limit поддерживается после удаления, но поддерживается только один параметр, то есть [limit row_count], который используется, чтобы сообщить серверу максимальное значение строк, которые должны быть удалены перед удалением. управляющая команда возвращается клиенту.

Синтаксис удаления limit следующий: стоит отметить, что order by должен использоваться вместе с limit, иначе он будет оптимизирован.

delete \[low\_priority\] \[quick\] \[ignore\] from tbl\_name
  \[where ...\]
    \[order by ...\]
      \[limit row\_count\]

Преимущества добавления лимита: В качестве примера возьмем следующий SQL:

delete from t where sex = 1; 

1. Сократить затраты на написание неправильного SQL.Даже если вы удалите неправильный SQL, например лимит 500, вы потеряете 500 кусков данных, что не фатально, и вы сможете быстро восстановить данные через binlog.

2. Избегайте длинных транзакций. При выполнении удаления MySQL добавит блокировки записи и гэп-блокировки (гэп-блокировки) ко всем задействованным строкам, и все строки, связанные с выполнением оператора DML, будут заблокированы. Если количество удалений велико, он будет непосредственно влияет на невозможность использования связанных предприятий.

3. Когда объем удаляемых данных велик, легко заполнить ЦП без добавления ограничения, что приводит к все более медленному удалению.

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

Что касается использования предела удаления, у босса MySQL Дин Ци есть вопрос:

Если вы хотите удалить первые 10 000 строк данных в таблице, это можно сделать тремя способами:

Во-первых, непосредственно выполнить удаление из T limit 10000; Во-вторых, выполнить 20 раз удалить из T limit 500 в цикле в соединении; В-третьих, выполнить удаление из T limit 500 в 20 соединениях одновременно.

Сначала подумай, а потом посмотри на ответы нескольких старых утюгов:

Тони Ду:

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

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

Вариант 3. Люди сами создают себе конкуренцию замков, увеличивая количество параллелизма.

Схема 2 относительно хороша, и ее нужно сочетать с реальным бизнес-сценарием.

Рошан:

Независимо от одновременного количества обращений к таблице данных, просто сравните эти три схемы.

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

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

Третья схема сама по себе создает конкуренцию замков и увеличивает параллелизм.

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

~ Жужжание:

1. Непосредственное удаление 10000 может сделать выполнение транзакции слишком долгим.

2. Эффективность низкая.Каждый цикл представляет собой новую короткую транзакцию, и одна и та же запись не будет заблокирована.Неоднократно выполнять DELETE, пока это не повлияет на поведение 0.

3. Хотя эффективность высока, одну и ту же запись легко заблокировать, а вероятность взаимоблокировки относительно высока.

Как удалить первые 10000 строк таблицы. Многие друзья выбирают второй метод, то есть: выполнить удаление из T limit 500 20 раз в цикле в соединении. Это действительно так, второй способ относительно лучше.

В первом методе (т. е. прямое выполнение удаления из T limit 10000) один оператор занимает много времени, а время блокировки относительно велико, а большие транзакции также вызывают задержки между ведущим и подчиненным.

Третий метод (то есть: выполнить удаление из T limit 500 в 20 соединениях одновременно) искусственно вызовет конфликты блокировок.

Этот пример значения нашей практики заключается в том, что, насколько это возможно, при удалении данных плюс предел. Это не только позволит контролировать количество удаленных данных, обеспечивая более безопасную работу, но также может уменьшить диапазон блокировки. Итак, после удаления плюс лимит стоит выработать хорошие привычки.

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

Автор: _Чен Ха-хаblog.CSDN.net/QQ_39390545…