当前位置: 代码迷 >> Oracle管理 >> 一条SQL优化的有关问题
  详细解决方案

一条SQL优化的有关问题

热度:88   发布时间:2016-04-24 04:26:43.0
一条SQL优化的问题
我现在有一条sql查询速度太慢,求一个解决方法
原sql

SELECT A.CONTRACT_ID,
       A.CONTRACT_CODE,
       A.CUST_ID,
       A.PROJECT_NAME,
       A.EFF_DATE,
       A.EXP_DATE,
       A.RENEWAL_FLAG,
       A.SIGNATURE_DATE,
       A.DEMAND_COMPLETED_DATE,
       A.SALE_STAFF_ID,
       A.SALE_PROPORTION,
       A.SALE2_STAFF_ID,
       A.SALE2_PROPORTION,
       A.SALE_TYPE,
       A.SALE_CODE,
       A.STATE,
       A.STATE_DATE,
       A.CREATED_DATE,
       A.UPDATE_DATE,
       A.PARTY_TYPE,
       A.PARTY_CODE,
       A.COMMENTS,
       A.LINKMAN_ID,
       A.CHECK_PARTY_TYPE,
       A.CHECK_PARTY_CODE,
       A.CONTRACT_ORG_ID,
       A.CONTRACT_TERM,
       A.CANCEL_REASON,
       A.CHECK_FAILURE_REASON,
       FOR_COMM_QUERY.FORMAT_PRICE_VALUE_BY_CVBS(A.CHARGE, 0) CHARGE,
       B.SUBS_ID,
       B.SUBS_NAME,
       C.SALE_TYPE_NAME,
       E.ADDRESS,
       E.ADDRESS_ID,
       F.DISTRICT_NAME,
       G.STREET_NAME,
       H.ROAD_NAME
  FROM CVBS_CONTRACT     A,
       CVBS_SUBS         B,
       CVBS_SALE_TYPE    C,
       CVBS_SUBS_ADDRESS D,
       CVBS_ADDRESS      E,
       CVBS_DISTRICT     F,
       CVBS_STREET_INFO  G,
       CVBS_ROAD_INFO    H
 WHERE 1 = 1
   AND A.CONTRACT_ID = B.CONTRACT_ID
   AND A.SALE_TYPE = C.SALE_TYPE(+)
   AND A.PARENT_CONTRACT_ID IS NULL
   AND A.STATE IN ('E', 'G')
   AND B.SUBS_ID = D.SUBS_ID
   AND D.ADDRESS_ID = E.ADDRESS_ID
   AND D.STATE = 'A'
   AND D.ADDRESS_TYPE IN ('A', 'C')
   AND E.ROAD_ID = H.ROAD_ID(+)
   AND H.STREET_ID = G.STREET_ID(+)
   AND G.DISTRICT_ID = F.DISTRICT_ID(+)
   --AND A.CONTRACT_ORG_ID = '2022' 
   --AND UPPER(A.CONTRACT_CODE) LIKE '%'||UPPER('-')||'%' 
   --AND UPPER(A.PROJECT_NAME) LIKE '%'||UPPER('中')||'%' 
   --AND A.EXP_DATE >= TO_DATE('2004-02-14 14:13:05', 'yyyy-mm-dd hh24:mi:ss') 
   --AND A.EXP_DATE <= TO_DATE('2014-02-14 14:13:09', 'yyyy-mm-dd hh24:mi:ss')
   --AND UPPER(B.SUBS_NAME) LIKE '%'||UPPER('中')||'%' --快
   AND EXISTS
 (SELECT R.SUBS_ID
  FROM (SELECT DISTINCT T.SUBS_ID
          FROM IB_SUB_COMPANY_CONTRACT_SUBS T
          WHERE 1 = 1
          AND T.STATE = 'A' 
        ) R
  WHERE B.SUBS_ID = R.SUBS_ID);

执行完是1.3秒左右 可以查到5条记录
注释掉的部分是界面可选参数
如可带上可选参数AND UPPER(B.SUBS_NAME) LIKE '%'||UPPER('中')||'%'的话执行完的时间是0.4秒
带上其他5个任意查询条件执行完的时间有好几十秒
请问怎么优化?
------解决方案--------------------
前排帮顶 友情混分 各大版主手下留情
------解决方案--------------------
前排帮顶 友情混分 各大版主手下留情 
------解决方案--------------------
引用:
弄不好我就死了。。老板说搞出来发媳妇啊!!!情人节不想变成情人劫!!!

其实我也不太懂优化,我觉得你是不是可以通过子查询将你需要的数据从每个表中筛选出来后再进行连接,直接连接感觉太混乱了。我也不知道行不行,你可以试试
------解决方案--------------------
引用:
Quote: 引用:
  相关解决方案