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

Каков наилучший способ удалить всю большую таблицу в t-sql?

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

Я пытаюсь очистить таблицы, но это происходит навсегда (есть все еще 57 000 000+ записей после того, как это пропустится через выходные... и это только первая таблица!)

Простое использование таблицы удаления занимает навсегда и ест пространство на диске (я считаю, из-за журнала транзакций.) Сейчас я использую цикл while для удаления записей X за раз, играя с X, чтобы определить, что фактически самый быстрый. Например, X = 1000 занимает 3 секунды, а X = 100 000 занимает 26 секунд... что делает математику немного быстрее.

Но вопрос в том, есть ли лучший способ?

(Как только это будет сделано, при запуске задания агента SQL очистите таблицу один раз в день... но сначала нужно очистить ее.)

4b9b3361

Ответ 1

TRUNCATE таблица или отключить индексы перед удалением

TRUNCATE TABLE [tablename]

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

Ответ 2

Чтобы добавить к другим ответам, если вы хотите сохранить данные за прошлый день (или за последний месяц или год или что-то еще), затем сохраните это, сделайте ТАБЛИЦУ TRUNCATE, а затем вставьте его обратно в исходную таблицу:

SELECT
     *
INTO
     tmp_My_Table
FROM
     My_Table
WHERE
     <Some_Criteria>

TRUNCATE TABLE My_Table

INSERT INTO My_Table SELECT * FROM tmp_My_Table

Следующее, что нужно сделать, это спросить себя, почему вы вставляете всю эту информацию в журнал, если об этом никто не заботится. Если вам это действительно не нужно, отключите ведение журнала в источнике.

Ответ 3

1) Таблица обрезания

2) script из таблицы, снимите и заново создайте таблицу

Ответ 4

TRUNCATE TABLE [tablename]

удалит все записи без ведения журнала.

Ответ 5

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

Ответ 6

Если вы можете выработать оптимальный x, это будет постоянно обходить удаление по самой быстрой скорости. Установка rowcount ограничивает количество записей, которые будут удалены на каждом шаге цикла. Если лог файл становится слишком большим; вставьте счетчик в цикл и обрезайте каждый миллион строк или около того.

set @@rowcount x тогда как 1 = 1 Начало

удалить из таблицы  Если @@Rowcount = 0 break

End

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