1

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

第一种方法:

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

或者

首先我应该将表创建为

create table as select .....

接着

delete from ..where exist.

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

4

2 回答 2

5

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

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

于 2012-08-02T14:20:16.447 回答
2

第二个会将大量记录写入磁盘,然后将其删除。这将在 10 种情况下的 9 种情况下花费更长的时间,然后过滤您开始写入的内容。

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

于 2012-08-02T14:21:03.143 回答