我有一个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语句也有两个表连接。
答案 0 :(得分:5)
减号很慢可能是因为它需要对磁盘上的表进行排序以便比较它们。
尝试使用NOT EXISTS
而不是MINUS
重写第一个查询,它应该更快,并且会产生更少的REDO和UNDO(如a_horse_with_no_name
提到的那样)。当然,请确保WHERE
子句中涉及的所有字段都已编入索引!
答案 1 :(得分:2)
第二个会将大量记录写入磁盘然后将其删除。这将在10个案例中的9个中占用更长的时间,然后过滤您开始编写的内容。
因此,如果第一个实际上不快,我们需要有关所涉及的表和语句的更多信息。