我有一个超过 1400 万行的数据库表。
如果我尝试执行:
delete from table
连接挂起。
如何“批量”删除所有行,以便最终删除它们?
我有一个超过 1400 万行的数据库表。
如果我尝试执行:
delete from table
连接挂起。
如何“批量”删除所有行,以便最终删除它们?
试用:
truncate table tblname
这具有不可回滚的优点,因此不必记录其操作,也不会触发触发器。这使得它比同等速度快得多delete from tblname
。
否则,您可以根据表数据计算出要删除的子集。例如,如果有一个包含姓氏的字段(希望被索引):
delete from tblname where lastname like 'A%'
请注意,这只是一个示例。你也可以使用类似的东西
等等。您选择的内容完全取决于您要删除的表。
truncate
由于其简单性,我自己更喜欢该命令。
删除是可以回滚的记录操作,因此它们可能非常慢。如果您可以截断或删除并重新创建表,那是您最好的选择。或者,您可以执行此 sql。
BEGIN
loop
delete from table where rownum < 500
exit when SQL%rowcount < 499
end loop;
END