【问题标题】:CTAS is slower when where condition is included包含条件时,CTAS 速度较慢
【发布时间】:2021-12-01 16:57:49
【问题描述】:

有 412499154 条记录的表,我必须根据 where 条件重新创建。该表有 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'))
    );

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

【问题讨论】:

    标签: sql oracle query-optimization


    【解决方案1】:

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

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

    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');
    

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2014-03-19
      • 2021-11-21
      • 2010-12-08
      • 2019-03-02
      相关资源
      最近更新 更多