Осталось 1000 записей от удаления 11g? - PullRequest
1 голос
/ 15 февраля 2012

Стол огромный. Для тестирования приложения я хочу удалить все, кроме 1000 записей из таблицы. 1000 счастливых записей не имеют идентификатора, который может быть задан как:

DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'

Каков наилучший способ в одном выражении SQL?

Ответы [ 4 ]

3 голосов
/ 15 февраля 2012

Создайте временную таблицу:

CREATE TABLE HUGE_TEST AS
  SELECT * FROM HUGE_TABLE WHERE ROWNUM <= 1000;

Теперь вы можете использовать ее для тестирования или удалить исходную таблицу и переименовать эту таблицу в фактическое имя таблицы.

2 голосов
/ 15 февраля 2012
  • Создать новую временную таблицу TempHugeTable
  • Вставьте счастливые записи в TempHugeTable (или переименуйте TempHugeTable в HugeTable, но позаботьтесь об индексах и других подобных вещах)
  • Обрезать HugeTable (или удалить его)

Это самый быстрый способ справиться с огромным количеством данных, работает также тогда, когда вам нужно обновить только небольшое количество в огромной таблице.

1 голос
/ 15 февраля 2012

Чтобы дать вам еще один вариант истинной случайности, вы можете попробовать это:

DELETE FROM huge_table
WHERE id NOT IN (
  SELECT id FROM (
    SELECT id FROM huge_table
    ORDER BY dbms_random.value
  ) WHERE rownum <= 1000
)

Но я согласен с другими ответами, что усечение и избегание упорядочения будет намного быстрее

0 голосов
/ 15 февраля 2012

посчитайте числоOfRecordsOnYourDB и сделайте:

set ROWCOUNT  (numberOfRecordsOnYourDB - 1000 )
delete from hugetable
Go

Это удалит записи из вашей таблицы, но остановит обработку после указанного числа строк.

о, и не забудьте вернуть ROWCOUNT обратно к большому значению или просто открыть новое соединение для выполнения других задач

...