我们有一张表,有 1300 万行。我们正在做一些计算,最后我们尝试删除 qty=0 行(实际上大约有 500 万行)。
我正在使用这个查询:
DELETE /*+ PARALLEL(8) */ FROM Table_Name WHERE QTY = 0;
删除这 500 万行需要超过 12 分钟。
知道如何通过使用其他选项来减少时间吗?
谢谢, 电信标准化局
根据 Oracle 博客上的测试,当涉及到从表中删除大量记录时,通常的删除语法是最慢的。 正如here所解释的,我认为您可以为此构建一个结构:
这意味着在您的情况下,创建一个包含值的表
create table rows_to_keep
select *
from table_name
where qty != 0;
truncate table table_name;
insert into table_name
select * from rows_to_keep;
更好的是,您可以使用交换逻辑 其过程类似:
create table rows_to_keep
select * from table_name
where quantity != 0;
rename table_name
to table_archived;
rename rows_to_keep
to table_name;