Вопрос

У меня есть таблица базы данных, которая имеет> 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top