Erp100论坛's Archiver

xiangzhao 发表于 2008-7-12 22:39

从表A中选取其ID不在表B中的记录,如何提高效率?

有3个表:saved_table(id, name), original_table(id, name), deleted_table(id);
original_table中有200w条记录, deleted_table中有90w条记录,这些记录就是original_table中应该被删除的记录。

要求:
根据deleted_table中的id,将original_table中id不在deleted_table中的记录写入到saved_table中(共110w条)。

我的方法:
INSERT /*+ APPEND */ INTO saved_table NOLOGGING
                   SELECT /*+ HASH_AJ */ *
                     FROM original_table
                    WHERE id NOT IN (SELECT id FROM deleted_table);

问题是,这样子还是很慢,有没有其他的方法?

xiangzhao 发表于 2008-7-12 22:39

CREATE TABLE saved_table NOLOGGING AS
                  SELECT c.*
                    FROM original_table o, deleted_table d
                   WHERE  o.id =d.id(+)
                     AND d.id IS   NULL;

哈昵KS宝贝 发表于 2008-9-3 12:52

SELECT /*+ HASH_AJ */ *
                     FROM original_table t1 WHERE   not exists
                    (SELECT 1 FROM deleted_table t2 where t1.id =t2.id );

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.