从删除11g中删除1000条记录?

时间:2012-02-15 11:39:58

标签: sql oracle testing oracle11g sql-delete

表格很大。对于测试应用程序,我想删除所有,除了表中的1000条记录。 1000个幸运记录没有可以给出的标识符:

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

一个sql语句中最好的方法是什么?

4 个答案:

答案 0 :(得分:3)

创建临时表:

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

现在您可以使用它进行测试,或删除原始表并将此表重命名为实际的表名。

答案 1 :(得分:2)

  • 创建一个新的临时表TempHugeTable
  • 将幸运记录插入TempHugeTable(或将TempHugeTable重命名为HugeTable,但要处理索引和其他类似的东西)
  • 截断HugeTable(或删除它)

这是处理大量数据的最快方法,当您只需要在巨大的表格中更新少量数据时也可以使用。

答案 2 :(得分:1)

为了给你另一种真正随机性的选择,你可以试试这个:

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

但我同意其他答案,截断和避免排序会更快

答案 3 :(得分:0)

计算numberOfRecordsOnYourDB并执行:

set ROWCOUNT  (numberOfRecordsOnYourDB - 1000 )
delete from hugetable
Go

这将从您的表中删除记录,但在指定的行数后停止处理。

哦,不要忘记将ROWCOUNT设置回一个大值,或者只是打开一个新连接来执行其他任务