题
我有一个数据库表,其行> 1400万行。
如果我试图执行:
delete from table
连接挂断。
如何在“批处理”中删除所有行,以最终被删除?
解决方案
试用:
truncate table tblname
这具有不可回滚的优势,因此不必记录其动作,也不要解开触发器。这使得它比等效的速度要快得多 delete from tblname
.
否则,您可以根据表数据来删除子集。例如,如果有一个字段(希望索引)包含姓氏:
delete from tblname where lastname like 'A%'
请注意,这只是一个示例。您也可以使用诸如
- 工资(<20k,20k-40k,40k-60k,...)。
- SSN。
- 当前平衡。
等等。您选择的内容完全取决于您要删除的表。
我更喜欢 truncate
由于其简单性而命令自己。
其他提示
删除 是记录的操作,可以向后滚动,因此它们可能会很慢。如果你可以的话 截短 或者放下并重新创建桌子,这是您最好的选择。或者,您可以 执行此SQL.
BEGIN
loop
delete from table where rownum < 500
exit when SQL%rowcount < 499
end loop;
END
不隶属于 StackOverflow