减去vs删除oracle中存在的地方

sub*_*989 1 sql oracle

我有一个CREATE TABLE查询可以使用两种方法完成(创建为千万/百万条记录的select语句):

第一种方法:

create table as select some data minus (select data from other table)
Run Code Online (Sandbox Code Playgroud)

要么

首先,我应该创建表格

create table as select .....
Run Code Online (Sandbox Code Playgroud)

然后

delete from ..where exist.
Run Code Online (Sandbox Code Playgroud)

我猜第二种方法更好.对于哪种查询成本较低?为什么减去查询的速度不如第二种方法快?编辑:我忘了提到create语句也有两个表连接.

mav*_*ato 5

减号可能很慢,因为它需要对磁盘上的表进行排序才能进行比较.

尝试用NOT EXISTS而不是重写第一个查询MINUS,它应该更快并且将产生更少的REDO和UNDO(a_horse_with_no_name如上所述).当然,请确保将WHERE子句中涉及的所有字段编入索引!

  • `minus`也会抑制源表中的任何重复,这可能不是问题,但可能是使用`not exists`的另一个原因. (2认同)