大神们,萌新求助SQL优化,不知道是不是索引多,插入太慢了,2分多钟

maxk222 发布于 2016/06/17 10:01
阅读 289
收藏 0
SQL
INSERT INTO T_REPORT_TRANSPORT_MONTH (CUID,LABEL_CN,BIG_TYPE,TYPE,NUM,CREATE_TIME,YEAR,MONTH,RELATED_DISTRICT_CUID)
          SELECT 
              '444-' || SYS_GUID() AS CUID,
              '333' AS LABEL_CN,
              '111' AS BIG_TYPE,
              '222' AS TYPE,
              COUNT(1) AS NUM,
              SYSDATE AS CREATE_TIME,
              TO_CHAR(SYSDATE, 'YYYY') AS YERA,
              TO_CHAR(SYSDATE, 'MM') AS MONTH,
              SUBSTR(E.RELATED_DISTRICT_CUID, 0, 26)
          FROM T_EXT_TRANS_ELEMENT T, T_SYS_ENUM_VALUE P, TRANS_ELEMENT E
          WHERE P.VALUE = T.LIFE_CYCLE_STATUS    
             AND E.CUID = T.RELATED_NE_CUID
             AND P.RELATED_ENUM_TYPE_CUID = 'LIFE_CYCLE_STATUS'
             AND E.SERVICE_LEVEL = 4
             AND T.LIFE_CYCLE_STATUS IN ('7', '8')

          GROUP BY SUBSTR(E.RELATED_DISTRICT_CUID, 0, 26)



一共有3个表,T_EXT_TRANS_ELEMENT  里面有250W数据,TRANS_ELEMENT 里面有500W数据,

         T_SYS_ENUM_VALUE 里面有1000条  !!!求带,我知道可以用extis替代in,但不会使用,求带!!

加载中
0
maxk222
maxk222
还有没有别的优化计划,最好的优化,能否做到1秒呢???
0
空无一长物
主要还是你这个查询速度太慢,跟你的插入没关系,看一下执行计划看有没有可以优化的地方
0
maxk222
maxk222
来来来,执行计划来了
0
maxk222
ToBeHJH
ToBeHJH
1.检查一下这个条件T.LIFE_CYCLE_STATUS IN ('7', '8')是否走索引 2.在SQL里面,P和T表连接后总共有多少数据返回?如果返回数据很多,执行计划就不是最优的
0
乌龟壳
乌龟壳

甭管怎么写,最终效果好不好都是看执行计划的。

要加速查询,得知道符合T.LIFE_CYCLE_STATUS IN ('7', '8')这个条件有多少结果。

总共查询出来的结果有多少条。

然后再考虑下一步怎么进行。

乌龟壳
乌龟壳
还有E.SERVICE_LEVEL = 4有多少条,根据数据集的比例,才好知道往哪个方向优化。
0
maxk222
maxk222
好的好的,谢谢大神们!!
0
显峰哥

T_SYS_ENUM_VALUE  这个表是多余的关联,完全可以去掉

返回顶部
顶部