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

时间:2012-08-02 14:12:28

标签: sql oracle

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

第一种方法:

create table as select some data minus (select data from other table)

OR

首先我应该将表创建为

create table as select .....

然后

delete from ..where exist.

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

2 个答案:

答案 0 :(得分:5)

减号很慢可能是因为它需要对磁盘上的表进行排序以便比较它们。

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

答案 1 :(得分:2)

第二个会将大量记录写入磁盘然后将其删除。这将在10个案例中的9个中占用更长的时间,然后过滤您开始编写的内容。

因此,如果第一个实际上不快,我们需要有关所涉及的表和语句的更多信息。