我們如何刪除表中的30萬條記錄。由於在線交易,我們不能刪除並重新創建表格。它是該系統的關鍵表格。刪除數百萬條記錄oracle
表中有6個大的索引。沒有任何分區。如果我們將分區添加到表中,很多pl/sql代碼將受到影響。
Delete from customers
where en_date < sysdate;
我們如何刪除表中的30萬條記錄。由於在線交易,我們不能刪除並重新創建表格。它是該系統的關鍵表格。刪除數百萬條記錄oracle
表中有6個大的索引。沒有任何分區。如果我們將分區添加到表中,很多pl/sql代碼將受到影響。
Delete from customers
where en_date < sysdate;
應該對包含數百萬行的表進行分區。索引也應該分區。分區會改變優化器選擇的計劃,但這是一件好事,因爲優化器可以提供更好的執行計劃。添加分區不會影響現有的代碼,如果有任何分區出現在提示中(除此之外,您還沒有),請刪除分區。
知道表中行的總數是多少,這樣我們就可以知道多少百分比的數據被刪除。另外,如果你可以設計分區的方式,你想刪除的所有行都屬於一個或多個分區,那麼你可以刪除這些分區(並創建新的分區),這是刪除最快的方法從像你這樣的大桌子。
「*具有數百萬行的表應該被分區*」有點誇張。我們有1億行沒有分區的表(並且不需要分區)。 –
我同意@a_horse_with_no_name。另外,你只能對每個表格進行分區。這個'DELETE'語句可能是當天的問題,但在確定是否以及如何對錶進行分區之前,您會希望查看整個應用程序。 'EN_DATE'分區在這裏肯定會有幫助,但可能不是最好的整體。 –
「我們如何刪除表中的30百萬條記錄。」
如果這些條目不需要一次全部刪除,那麼一次刪除這些條目的百分之幾,直到查詢結果大小爲零,如果這是在實時系統上完成的。
也許找到要刪除的條目的主鍵範圍,手動更新刪除SQL,以便每次刪除幾個百分比,以免影響LIVE太多。
我猜'truncate'不適用? –
你的表是否分區? – Tatiana
提前計劃並對錶格進行分區。 –