Удалять данные пачками, общая яма! ! !

задняя часть база данных

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

Все шаги эксперимента, как показано выше:

первый шаг: Создайте таблицу и установите столбцы автоинкремента;

второй шаг: Укажите id=1 для вставки, привязка первой строки к id равна 1;

третий шаг: не указывайте идентификатор, полагайтесь на механизм автоинкремента и вставляйте 3 строки;

Голос за кадром: Идентификатор должен быть изменен на 2, 3, 4 сейчас?

четвертый шаг:delete удаляет все записи;

_Голос за кадром: _Повесить здесь легко.

пятый шаг: укажите id=0 для вставки;

Шаг 6: укажите id=1 для вставки;

Шаг 7: не указывайте идентификатор, полагайтесь на механизм автоинкремента и вставляйте 1 строку;

Простите, какие идентификаторы трех строк записей в таблице на данный момент?

Соответствует ли это ожиданиям всех?

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

Существует три распространенных способа массового удаления данных.

drop table

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

truncate table

Удаляет все данные, сохраняя таблицу, быстро.

_Голос за кадром: _Это можно понять как удалить таблицу, а затем создать таблицу.

delete from table

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

Вы также можете удалить некоторые данные с очень гибким условием where.

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

один,

truncate — это оператор DDL, т. н. «откат транзакции» отсутствует;

delete — это оператор DML, для которого можно выполнить откат после его выполнения.

два,

Возвращаемое значение усеченной таблицы равно 0;

Возвращаемое значение удаления из таблицы — это количество удаленных строк.

три,

InnoDB поддерживает одну таблицу на файл, когда:

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

удаление из таблицы удалит строку за строкой, активирует триггер, и скорость будет относительно низкой.

_Голос за кадром: _Данные удаления должны быть зарегистрированы, а таблица усечения не нуждается в регистрации.

Четыре,

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

усечение не удастся;

удалить получится.

_Голос за кадром: _При таком сбое удаления данных легко обнаружить проблему, поскольку сообщение об ошибке простое и понятное.

пять,

Когда в таблице есть столбцы с автоинкрементом:

truncate восстановит количество столбцов с автоинкрементом;

После удаления всех данных автоматически увеличивающийся счетчик столбцов не начинается с нуля.

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

Есть ли что-нибудь, чтобы выиграть в эту минуту?

Пожалуйста, выберите способ удаления данных в соответствии с вашим собственным бизнес-сценарием.

Архитектор дороги- Делитесь техническими идеями

Статьи по Теме:

"буферный пул

"буфер записи (буфер изменения)

"буфер журнала

 

домашние вопросы:

В эксперименте в начале, каковы идентификаторы трех строк записей в последней таблице?

_Голос за кадром: _Вы считаете, что статья говорит вам принцип, и вы можете правильно ответить?