Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提高此oracle sql删除查询的性能?_Sql_Performance_Oracle - Fatal编程技术网

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

如何提高此oracle sql删除查询的性能?,sql,performance,oracle,Sql,Performance,Oracle,根据另一个表的select查询结果,我从一个表中删除了一些不需要的行 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' ); 内部select查询返回77行,并在几毫秒内执行。但是

根据另一个表的select查询结果,我从一个表中删除了一些不需要的行

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'
 );
内部select查询返回77行,并在几毫秒内执行。但是外部删除查询将永远运行8个多小时。我试图通过将delete转换为selectcount1来计算需要删除的行数,在总共6680万行中,大约有6640万行需要删除。不过,我并没有试图截断。我需要保留剩余的行


有没有其他方法可以做到这一点?通过运行pl/sql游标删除该行会更好吗?

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

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

您能添加一个toBeDeleted列吗?要设置的查询不需要在构造中设置。删除标记行也应该很简单


同样,删除6700万行中99.4%的行需要一些时间。

能否添加一个toBeDeleted列?要设置的查询不需要在构造中设置。删除标记行也应该很简单


同样,删除6700万行中99.4%的行需要一些时间。

尝试/*+parallelfe*/。不,请尝试/*+parallelfe*/。不,我想这不是内部查询速度慢的问题。这似乎都是由于oracle回滚段和删除期间发生的重做日志。我一问汤姆就发现了这个。。然后,如果经常需要删除几乎整个表,请使用答案by。我想这不是内部查询速度慢的问题。这似乎都是由于oracle回滚段和删除期间发生的重做日志。我一问汤姆就发现了这个。。然后,如果经常需要删除几乎整个表,请使用.ya的答案,这就是我们要尝试的。也许我猜这会比尝试用游标进行批量删除更快..是的,这就是我们要尝试的。也许我猜这比用游标进行批量删除要快。。