繁体   English   中英

我如何提高此oracle sql删除查询的性能?

[英]how can i improve the performance of this oracle sql delete query?

我必须根据另一个表中的选择查询结果从表中删除一些不需要的行

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游标删除它会更好?

仅将要保留的行插入另一个表,然后删除现有表,是否更有意义? 即使有FK禁用/重新创建/等。 几乎可以肯定会更快。

您可以添加“ toBeDeleted”列吗? 设置不需要“ NOT IN”构造的查询。 删除标记的行也应该是“简单的”。

然后,再次删除6700万行中的99.4%将需要一些时间。

尝试/ * + parallel(fe)* /。 没有“ S”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM