表是巨大的。對於測試應用程序,我想刪除表中除1000條記錄以外的所有內容。 1000個幸運記錄沒有可以給出的標識符:從刪除11g剩下1000條記錄?
DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'
什麼是一個sql語句中的最佳方式?
表是巨大的。對於測試應用程序,我想刪除表中除1000條記錄以外的所有內容。 1000個幸運記錄沒有可以給出的標識符:從刪除11g剩下1000條記錄?
DELETE FROM HUGE_TABLE t WHERE t.IDENTIFIER!='LUCKY'
什麼是一個sql語句中的最佳方式?
算numberOfRecordsOnYourDB並且這樣做:
set ROWCOUNT (numberOfRecordsOnYourDB - 1000)
delete from hugetable
Go
這將刪除表中的記錄,但在指定的行數後停止處理。
哦,不要忘記設置ROWCOUNT回到大值,或者只是打開一個新的連接做其他任務
創建一個臨時表:
CREATE TABLE HUGE_TEST AS
SELECT * FROM HUGE_TABLE WHERE ROWNUM <= 1000;
現在你可以使用這個測試,或刪除原始表,此表重命名爲實際的表名。
這是處理海量數據的最快方式,作品也當你有一個巨大的表格只更新量小。
給你真正的隨機性的另一種選擇,你可以試試這個:
DELETE FROM huge_table
WHERE id NOT IN (
SELECT id FROM (
SELECT id FROM huge_table
ORDER BY dbms_random.value
) WHERE rownum <= 1000
)
但我與其他答案同意,截斷和避免排序將是快了很多
這看起來像SQL Server語法......? – 2012-02-15 12:26:30
對Oracle來說不是問題嗎? – 2012-02-15 17:19:35