【发布时间】:2012-03-29 01:23:18
【问题描述】:
我必须根据从另一个表中选择查询的结果从一个表中删除一些不需要的行
DELETE /*+ parallels(fe) */ FROM fact_x fe
WHERE fe.key NOT IN(
SELECT DISTINCT di.key
FROM dim_x di
JOIN fact_y fa
ON fa.code = di.code
WHERE fa.code_type = 'ABC'
);
内部选择查询返回 77 行并在几毫秒内执行。但外部删除查询永远运行(超过 8 小时)。我试图通过将 delete 转换为 select count(1) 来计算要删除的行数,它在总共 6680 万行中约有 6640 万行 fact_x 行。我并不想截断。我需要保留剩余的行。
还有其他方法可以实现吗?通过运行 pl/sql 游标删除它会更好吗?
【问题讨论】:
标签: sql performance oracle