2009-11-19 83 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