sql 优化问题 如何解决效率问题

苏别v 发布于 2016/04/25 11:01
阅读 548
收藏 0

Serverless 架构就不要服务器了?>>>

select t3.stcd,
       t3.stnm,
       t3.adcd,
       t3.adnm,
       nvl(t4.sdrp, 0)sdrp from (select t1.stcd, t1.stnm, t2.adcd, t2.adnm
                                   from (select cast(stcd as varchar2(50)) stcd,
                                                trim(stnm) stnm,
                                                addvcd
                                           from st_stbprp_b
                                          where usfl = '0'
                                             or  usfl is null and length(stcd) = 8 and length(addvcd) = 6) t1,
                                        (select adcd, adnm
                                           from ad_cd_b
                                          where substr(adcd, 7, 15) =
                                                '000000000'
                                            and substr(adcd, 5, 15) <>
                                                '00000000000') t2
                                  where substr(t1.addvcd,0,6) = substr(t2.adcd(+), 0, 6) and substr(t2.adcd,7,15) = '000000000') t3,(select stcd,
                                                                                          sum(drp) sdrp
                                                                                     from st_pptn_r
                                                                                    where intv = '1'
                                                                                      and tm >=
                                                                                          to_date('2016-04-24 08:00',
                                                                                                  'yyyy-mm-dd hh24:mi:ss')
                                                                                      and tm <=
                                                                                          to_date('2016-04-25 10:00',
                                                                                                  'yyyy-mm-dd hh24:mi:ss')
                                                                                    group by stcd) t4 where t3.stcd = t4.stcd and t4.sdrp > 0 order by sdrp desc
加载中
2
ColinWorld
ColinWorld
你可以考虑分步解决,有时候你连接在这一起很难使用索引来优化,分部解决可能还会用到缓存
苏别v
苏别v
恩 谢谢回答问题 我从新建了一张表 将数据重新导入 速度就快了 到现在也不清楚是为什么
0
苏别v
苏别v
苏别v
回复 @战争总会来临 : 恩 谢谢回答问题 我从新建了一张表 将数据重新导入 速度就快了 到现在也不清楚是为什么
战争总会来临
战争总会来临
这是有几层Select啊,能不能一层层的格式化整齐了,让人一眼看出来是个啥目地?
0
苏别v
苏别v
就是图中的表  一连接之后 效率非常慢 4S左右
0
求是科技
求是科技
有可能是 where后面的 or 的问题,要不你改为 !='0' and isnot null试下
苏别v
苏别v
我那个是 ='0' 要是!= 就是不等于了 union我也用了 之前就试过 还是4S多
0
求是科技
求是科技

再不行的话 改为union吧


0
匆匆里
匆匆里
1. 格式化很重要,可以给代码分析打好基础
2. substr(adcd, 7, 15) = '000000000' 查询条件不能加函数处理,这样做数据库就不能帮你走索引了
3. usfl = '0' or  usfl is null 要用括号括起来, 现在 and length(stcd) = 8 and length(addvcd) = 6 这两个条件已经失效了
4. 改好后看一下sql执行计划,该加索引加索引吧,oracle对关联查询支持的还是很好的
苏别v
苏别v
恩 谢谢回答问题 我从新建了一张表 将数据重新导入 速度就快了 到现在也不清楚是为什么
0
Happy猪猪
Happy猪猪

建议缩小结果集


苏别v
苏别v
谢谢 恩 谢谢回答问题 我从新建了一张表 将数据重新导入 速度就快了 到现在也不清楚是为什么
0
螃蟹大叔
螃蟹大叔
有时候我觉得你还是用定时任务跑数据吧,这么复杂的查询,也不利于后期的分表分库的扩展,需要什么样的数据定时任务跑出来,在写个简单的查询就ok了,你就算用到所有的优化策略,你的这条sql又能提升多少呢
苏别v
苏别v
刚开始 我也是这么想的 可是客户要实时数据
0
f
fanjx

看执行计划感觉时间主要花在t1,t2表的全表扫描。

主要的抽取条件挺是t4表的时间的话,把t4作为驱动表,往t1,t2里找的话会好些吧。

另外t1,t2检索条件和结合条件用了substr导致没法用索引也要想办法改下(经常用这种方法检索的话表定义改了比较好)

0
IdleMan
IdleMan


usfl = '0'
                                             or  usfl is null and length(stcd) = 8 and length(addvcd) = 6



我觉得你这的逻辑有问题,这个OR 两边的条件确定不加括号?


索引on(usfl,length(stcd),length(addvcd))的性能好坏要看数据的选择性强不强,强则建之

苏别v
苏别v
哈哈 不好意思 确实忘记加了 但不是这个问题 影响的
返回顶部
顶部