2009-11-19 28 views
1

我有一個數據庫表有超過1400萬行。刪除批

如果我試圖執行:

delete from table 

連接掛出。

如何刪除「批次」中的所有行,以便最終刪除它們?

回答

2

試用:

truncate table tblname 

這具有不回滾,可以這樣將不必再登錄其行動的優勢,也不會觸發觸發器。這使得它比等效的delete from tblname快得多。

否則,您可以根據您的表數據計算出要刪除的子集。例如,如果有一個包含姓氏的字段(希望索引):

delete from tblname where lastname like 'A%' 

請注意,這僅僅是一個示例。你也可以使用像

  • 工資(< 20K,20K-40K,40K-60K,...)。
  • SSN。
  • 當前餘額。

等等。您選擇的內容完全取決於您要刪除的表格。

由於其簡單性,我更喜歡truncate命令。

+0

沒有。它做了什麼?它是否刪除了所有沒有交易或事情的東西? – OscarRyz 2009-11-19 22:37:39

+0

恩赫恩我已經知道了,你知道,我只是想從常見問題做一個「危險的問題類型」*它也可以很好地問和回答你自己的問題,但假裝你在危險之中:問題的形式* je je je感謝paxdiablo – OscarRyz 2009-11-19 22:41:40

+0

嗯?你在跟自己說話嗎? – ceejayoz 2009-11-19 22:44:55

2

刪除是可以回滾的日誌操作,因此它們可能很慢。如果你可以截斷或刪除並重新創建表,這是你最好的選擇。或者,您可以execute this sql

BEGIN 
loop 
    delete from table where rownum < 500 
    exit when SQL%rowcount < 499 
end loop; 
END