当包含条件时,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');
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');