当包含条件时,CTAS 会变慢

CTAS is slower when where condition is included

table 有 412499154 条记录,我必须根据 where 条件重新创建。 table 有 6 列和所有 varchar2() 数据类型。

当我重新创建全部内容时,大约需要 10 分钟。

CREATE TABLE TEMP_NEW_01 NOLOGGING
    AS
    SELECT COL1,COL2,COL3,COL4,COL5,COL6
    FROM  TEMP_DATA ;

当包含 where 子句时,它的 运行 无限期地,

CREATE TABLE TEMP_NEW_01 NOLOGGING
    AS
    select  COL1,COL2,COL3,COL4,COL5,COL6
    FROM  TEMP_DATA
    WHERE COL1 IN
    (SELECT COL1 FROM temp_m2
        where  SHORT_CAPTION  in ( select  SHORT_CAPTION from t_category 
        where scat_caption  in ('P','V'))
    );

有什么改进建议吗?谢谢!

不使用(嵌套的)子查询,而是连接表。

确保您在联接中使用的列已编入索引;如果没有,那么:

CREATE INDEX i1_dat_col1 ON temp_data (col1);
CREATE INDEX i1_m2_col1  ON temp_m2 (col1);
CREATE INDEX i2_m2_capt  ON temp_m2 (short_caption);
CREATE INDEX i1_cat_capt ON t_category (short_caption);

在 运行 CREATE TABLE 语句之前收集所有表和索引的统计信息!

最后:

CREATE TABLE temp_new_01
AS
   SELECT d.col1,
          d.col2,
          d.col3,
          d.col4,
          d.col5,
          d.col6
     FROM temp_data d
          JOIN temp_m2 m ON m.col1 = d.col1
          JOIN t_category c ON c.short_caption = m.short_caption
    WHERE c.scat_caption IN ('P', 'V');