表格很大。对于测试应用程序,我想删除所有,除了表中的1000条记录。 1000个幸运记录没有可以给出的标识符:
DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'
一个sql语句中最好的方法是什么?
答案 0 :(得分:3)
创建临时表:
CREATE TABLE HUGE_TEST AS
SELECT * FROM HUGE_TABLE WHERE ROWNUM <= 1000;
现在您可以使用它进行测试,或删除原始表并将此表重命名为实际的表名。
答案 1 :(得分:2)
这是处理大量数据的最快方法,当您只需要在巨大的表格中更新少量数据时也可以使用。
答案 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设置回一个大值,或者只是打开一个新连接来执行其他任务