Удалить 130 миллионов строк - PullRequest
1 голос
/ 21 марта 2019

В SQL Server 2012 мне нужно удалить более 100 миллионов строк из таблицы с 4-5 индексами.

Как продолжить?Я предполагаю, что журнал транзакций будет заполнен и, следовательно, отменит транзакцию.

Спасибо за вашу помощь

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

В зависимости от размера таблицы, вы можете обнаружить, что она может быть быстрее очищена и заполнена:

create table temp_t
    select *
    from t
    where <i want to keep conditions>;

truncate table t;

insert into t
    select *
    from temp_t;

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

0 голосов
/ 21 марта 2019

Если вы

должно быть достаточно сделать chunked delete . Множество примеров можно найти в различных связанных вопросах здесь, на SO и dba.SE (например, этот или этот ). Чтобы сделать этот ответ самодостаточным, я процитирую один из этих примеров (взят из этот ответ gbn и немного изменен) здесь:

SELECT 'Starting' --sets @@ROWCOUNT
WHILE @@ROWCOUNT <> 0
    DELETE TOP (10000) MyTable WHERE <some condition>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...