CVBS_CONTRACT的索引CVBS_SUBS的索引
带上全部条件的执行计划:

解决方案 »

  1.   

    其实我也不太懂优化,我觉得你是不是可以通过子查询将你需要的数据从每个表中筛选出来后再进行连接,直接连接感觉太混乱了。我也不知道行不行,你可以试试
    因为不带6个条件查询是1.4秒 我试过先不带条件查询 然后结果外再加6个条件 但是一样的不会动
    本来你的数据就很大,再相互连接就更恐怖了,我的意思先通过条件将数据量变小再对表进行关联
    我找到问题了
    去掉AND A.PARENT_CONTRACT_ID IS NULL就很快了 
      

  2.   

    OK了 AND A.PARENT_CONTRACT_ID IS NULL放在最后就很快 但是不知道为什么
      

  3.   

    AND A.PARENT_CONTRACT_ID IS NULL 无法走索引,索引不存储NULL值
      

  4.   

    现在的问题是删掉AND A.PARENT_CONTRACT_ID IS NULL会快很多 但是加上
    --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') 
    任意一个会慢10秒 两个都加上 会卡死
      

  5.   

    A.EXP_DATE 是可空的
    老板说了 帮忙解决的也给媳妇啊!!1
      

  6.   

    把 上面注释的那些查询条件放到 where 1=1 后面试试?
      

  7.   

    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') 
    EXP_DATE 建索引,在连接A表钱 先把符合
    条件的拿出来再连接
      

  8.   

    A B D这三个表的记录多大,我看有好几个过滤条件,能过滤掉多少数据呢,如果过滤掉大部分,那么就先把过滤的插入临时表另外,我看你的select子句里边使用了函数,这个函数的性能怎样?如果不好,是不是可以使用左连接来做?
      

  9.   

    EXP_DATE需要建立函数索引,直接在EXP_DATE上建索引,TO_DATE也不会走索引。