解决一个非常大的表的性能问题
select T225043.DAY_DT as c1,
sum(T239481.SELL_OUT) as c2,
T225101.OUTLET_ID as c3,
case
when 'en' = 'en' then
T225101.OUTLET_NAME
else
T225101.OUTLET_NAME_CHN
end as c4
from WC_V_OUTLET_PROFILE_D T225101,
WC_DAY_D T225043 /* Dim_WC_DAY_D */,
WC_OUTLET_P_SALESVOLUME_F T239481
where (T225101.OUTLET_WID = T239481.OUTLET_WID and
T225043.ROW_WID = T239481.DAY_WID)
group by T225043.DAY_DT,
T225101.OUTLET_ID,
case
when 'en' = 'en' then
T225101.OUTLET_NAME
else
T225101.OUTLET_NAME_CHN
end
order by c1, c3, c4
现在这段SQL 在PL/SQL 执行解释计划后, WC_OUTLET_P_SALESVOLUME_F PARTITION HASH JOIN
TABLE Access FuLL Cost “46671”
WC_OUTLET_P_SALESVOLUME_F 我做过PARTITION by range 按照得是表里period_id分的区
下面是我为表创建的Index
create unique index WC_OUTLET_P_SALESVOLUME_F_P1 on WC_OUTLET_P_SALESVOLUME_F2 (ROW_WID);
create index WC_OUTLET_P_SALESVOLUME_F_INX1 on WC_OUTLET_P_SALESVOLUME_F2 (DAY_WID, OUTLET_WID);
为什么查旬起来很慢,这段SQL从工具的log里自动生成的,改不掉, 大家帮忙看看怎么提高查迅速度。 (不要告我去掉里面的SQL的语句的写法,因为语句是自动生成的)
|