Удалить на партии
-
21-09-2019 - |
Вопрос
У меня есть таблица базы данных, которая имеет> 14 миллионов строк.
Если я попытаюсь выполнить:
delete from table
Соединение тусуется.
Как я могу удалить все ряды, в «партиях», чтобы в конце концов они удалены?
Решение
Проверять:
truncate table tblname
Это имеет преимущество в том, что он не может быть откатом, поэтому не придется регистрировать свои действия, а также не срабатывать триггеры. Это делает его значительно быстрее, чем эквивалент delete from tblname
.
В противном случае вы можете выработать подмножества для удаления, основываясь на данных о вашей таблице. Например, если есть поле (надеюсь, индексируется), содержащее фамилии:
delete from tblname where lastname like 'A%'
Обратите внимание, что это просто пример. Вы также можете использовать такие вещи, как
- Зарплата (<20K, 20K-40K, 40K-60K, ...).
- SSN.
- текущий баланс.
и так далее. То, что вы выбираете, полностью зависит от таблицы, который вы пытаетесь удалить.
Я предпочитаю truncate
командовать себя из -за его простоты.
Другие советы
удаляет зарегистрированные операции, которые могут быть откатываны назад, следовательно, они могут быть довольно медленными. Если вы можете усечь Или брось и воссоздайте стол, это ваш лучший выбор. В качестве альтернативы вы можете выполнить этот SQL.
BEGIN
loop
delete from table where rownum < 500
exit when SQL%rowcount < 499
end loop;
END