麻烦看看此SQL能如何优化。需求:显示可销天数,7天平均数量,30天平均数量,季度平均数量的显示。问题:此SQL中
麻烦看看此SQL能如何优化。
需求:
显示可销天数,7天平均数量,30天平均数量,季度平均数量的显示。
问题:
此SQL中有张单表数据达到2400W。(需要优化.)
SQL,此SQL还未完结.现在只显示了可销天数,7天销量.剩下的字段还未显示.(但实现的方法和7天比较类似)
SELECT *
FROM (SELECT A.*, ROWNUM RN
FROM (select a.mc, a.spm, a.xssl, b.xssl1, a.kcsl
from (select tb.name mc, ta.spm, avg(ta.xssl) xssl, ta.kcsl
from CC_JXC_GYS_DAY ta,
(select * from inf_shop where fgs = 'C') tb
where ta.gys = '10035'
and ta.mc = tb.code
and ta.rq < add_months(sysdate, -1)
group by tb.name, ta.spm, ta.kcsl
order by kcsl desc) a,
(select tb.name mc,
ta.spm,
avg(ta.xssl) xssl1,
ta.kcsl kcsl
from CC_JXC_GYS_DAY ta,
(select * from inf_shop where fgs = 'C') tb
where ta.gys = '10035'
and ta.mc = tb.code
and to_char(ta.rq, 'yyyy-mm-dd') =
to_char(sysdate - 7, 'yyyy-mm-dd')
group by tb.name, ta.spm, ta.kcsl
order by kcsl desc) b) a
WHERE ROWNUM <= 1000)
WHERE RN >= 21
PL/SQL解释计划:
SELECT STATEMENT, GOAL = ALL_ROWS
耗费=5782基数=1000字节=106000
VIEW对象所有者=ZON100
耗费=5782基数=1000字节=106000
COUNT STOPKEY
NESTED LOOPS
耗费=5782基数=1000字节=93000
VIEW
对象所有者=xx 耗费=197基数=500字节=6500
SORT GROUP BY
耗费=181231基数=924字节=64680
HASH JOIN耗费=181230基数=924字节=64680
TABLE ACCESS FULL
对象所有者=xx 对象名称=INF_SHOP耗费=6基数=173字节=3806
TABLE ACCESS FULL
对象所有者=xx 对象名称=CC_JXC_GYS_DAY耗费=181223基数=6648字节=319104
VIEW对象所有者=ZON100
耗费=5585基数=1000字节=80000
SORT GROUP BY
耗费=181752基数=32543字节=2278010
HASH JOIN
耗费=181212基数=32543字节=2278010
TABLE ACCESS FULL
对象所有者=xx
对象名称=INF_SHOP耗费=6基数=173字节=3806
TABLE ACCESS FULL
对象所有者=xx
对象名称=CC_JXC_GYS_DAY耗费=181204基数=234194字节=11241312
寻求您的耐心指点。万分感谢。
[解决办法]
检索数据超过表中数据30%,索引可能会失效
[解决办法]
将相同部分用WITH抽取出来试试,
估计问题最多的是全表扫描的问题,索引没有加对,
如果不知道怎么处理,可以试试用OEM的SQL ADVICER看看怎么建议的
