1

我有一个超过 1400 万行的数据库表。

如果我尝试执行:

 delete from table

连接挂起。

如何“批量”删除所有行,以便最终删除它们?

4

2 回答 2

2

试用:

truncate table tblname

这具有不可回滚的优点,因此不必记录其操作,也不会触发触发器。这使得它比同等速度快得多delete from tblname

否则,您可以根据表数据计算出要删除的子集。例如,如果有一个包含姓氏的字段(希望被索引):

delete from tblname where lastname like 'A%'

请注意,这只是一个示例。你也可以使用类似的东西

  • 薪水(<20K,20K-40K,40K-60K,...)。
  • 社会保障号。
  • 当前余额。

等等。您选择的内容完全取决于您要删除的表。

truncate由于其简单性,我自己更喜欢该命令。

于 2009-11-19T22:34:23.750 回答
2

删除是可以回滚的记录操作,因此它们可能非常慢。如果您可以截断或删除并重新创建表,那是您最好的选择。或者,您可以执行此 sql

BEGIN
loop 
  delete from table where rownum < 500
  exit when SQL%rowcount < 499
end loop;
END
于 2009-11-19T22:38:43.413 回答