2009-11-19 6 views
1

У меня есть таблица базы данных, которая имеет> 14 миллионов строк.Удалить на партию

Если я пытаюсь выполнить:

delete from table 

соединение болтается.

Как удалить все строки в «партиях», чтобы они были удалены в конце концов?

ответ

2

Попробуйте:

truncate table tblname 

Это имеет то преимущество, не будучи в состоянии отката, поэтому не придется регистрироваться свои действия, а также не срабатывают триггеры. Это делает его значительно быстрее, чем эквивалент delete from tblname.

В противном случае вы можете выработать подмножества для удаления на основе данных таблицы. Например, если есть поле (надеюсь индексируется), содержащие фамилии:

delete from tblname where lastname like 'A%' 

Обратите внимание, что это всего лишь пример. Вы также можете использовать такие вещи, как

  • заработная плата (< 20K, 20K-40K, 40K-60K, ...).
  • SSN.
  • текущий баланс.

и так далее. То, что вы выбираете, целиком зависит от таблицы, которую вы пытаетесь удалить.

Я предпочитаю команду truncate из-за ее простоты.

+0

Nope .. что он делает? Удаляет ли он все без транзакции или чего-то еще? – OscarRyz

+0

Ну, эмм, я уже знал это, ты знаешь, я просто хотел сделать «вопрос о проблеме с угрозой» из FAQ * Это также прекрасно, чтобы спросить и ответить на свой собственный вопрос, но притворяйся, что находишься под угрозой: форма вопроса. * je je je Спасибо paxdiablo – OscarRyz

+0

А? Вы разговариваете сами с собой? – ceejayoz

2

удаляет операции, которые могут быть отброшены назад, следовательно, они могут быть довольно медленными. Если вы можете обрезать или бросить и воссоздать таблицу, это ваш лучший выбор. Кроме того, вы можете execute this sql.

BEGIN 
loop 
    delete from table where rownum < 500 
    exit when SQL%rowcount < 499 
end loop; 
END 
Смежные вопросы