我有一个 CREATE TABLE
查询,它可以使用两种方法完成(为数千/百万条记录创建 select 语句):
第一种方法:
create table as select some data minus (select data from other table)
或
首先我应该创建表
create table as select .....
然后
delete from ..where exist.
我猜第二种方法更好。对于哪个查询成本更低?为什么负查询不如第二种方法快? 编辑: 我忘了提到 create 语句也有来自两个表的连接。
最佳答案
minus 很慢可能是因为它需要对磁盘上的表进行排序以便比较它们。
尝试用 NOT EXISTS
而不是 MINUS
重写第一个查询,它应该更快并且生成更少的 REDO 和 UNDO(如 a_horse_with_no_name
提到)。当然,要确保WHERE
子句中涉及的所有字段都被索引了!
https://stackoverflow.com/questions/11779267/