Недавно друг спросил меня, он сказал, что ему очень медленно удалять миллионы или десятки миллионов данных в SQLSERVER. Я помог ему проанализировать это и сделал несколько советов, которые могут быть полезны для многих людей, и это так. тоже очень долго. Я еще не писал блог, давайте обсудим это вместе.
Если у вас мало места на жестком диске, и вы не хотите устанавливать минимальный журнал базы данных (потому что вы хотите, чтобы другие нормальные журналы все еще были). записано), и у вас относительно высокие требования к скорости и очистите все данные. Я предлагаю вам использовать Turncate table1, поскольку усечение — это операция DDL, она не генерирует откат и работает быстрее, если не записывает журналы. Тогда, если есть. это автоинкремент, он будет восстановлен в 1, а удаление вызовет откат. Если вы удалите таблицу с большим объемом данных, скорость будет очень медленной, она будет занимать много сегментов отката, а также. записывать журналы уровня G; конечно, что, если есть условные удаления, например, где time<'2006-3-10'? Могу ли я использовать удаление без регистрации? Ответ - нет, механизм SQL Server предназначен для регистрации удаления. операции. Пока не существует способа заставить определенные операторы не записываться в журнал. Если выполняется команда «Удалить таблицу 1, где время < '2006-3-10», запись журнала будет очень большой (3-4 ГБ), поскольку их много. Если возможно, я предлагаю следующий метод:
выберите записи, которые вам нужно сохранить, в новую таблицу. Если вы используете режим полного восстановления
В зависимости от количества записей SELECT INTO журнал может быть больше.
Выберите * в таблице 2 из таблицы 1, где время > = '2006-03-10'
, а затем напрямую обрежьте таблицу 1. Журналирование не будет осуществляться независимо от модели восстановления.
Усеките таблицу Table1
и, наконец, переименуйте Table2 в Table1.
EC sp_rename 'Table2', 'Table1'
Источник: БЛОГ: столбец domino.