有 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'))
);
有什么改進的建議嗎?謝謝!
uj5u.com熱心網友回復:
而不是使用(嵌套)子查詢,連接表。
確保您在連接中使用的列已編入索引;如果沒有,那么:
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');
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314315.html
