我有一個包含3億條記錄的表(表A),我想根據某些條件執行數據保留活動。所以我想刪除大約200M表中的記錄。根據條件從非常大的表中刪除舊記錄
關於性能,我計劃創建一個新表(Table-B),其中包含Table-A中最早的10M記錄。然後,我可以從Table-B中選擇符合條件的記錄,並將其從表A中刪除。
從表A中提取10M記錄並使用SQL Loader加載到表B中需要約5小時。
我已經創建了索引,並且在適用的地方使用了並行32。
我想知道的是,
- 有沒有更好的辦法從表-A提取和將其加載表-B。
- 除了創建一個臨時表(Table-B)之外,還有其他更好的方法嗎?
DBMS:Oracle 10g,PL/SQL和Shell。
謝謝。
這兩個表都在同一個數據庫中嗎?如果是的話,您是否使用SQL Loader來加載乳清?你不能只是'插入tableB select * from tableA'嗎?另外創建tableB作爲'no logging'來獲得更快的插入。 Google'nologging'獲取更多細節。 – Utsav
我同意@Utsav,只是'插入/ * +追加* /到t2選擇*從t1哪裏'應該需要幾分鐘而不是幾個小時。這是我會更擔心的'刪除'。您是否有下一次需要分區的選項? –
關於「除了創建臨時表(Table-B)之外是否還有其他更好的方法」,我不明白你的過程邏輯。表B是什麼?我的意思是,創建它的替代方法不會創建它。 –