解决方案 »

  1.   

    G 查询的 ORDER BY RN,去掉,没有实际意义
    另外问下WWID是各个表的主键吗?
      

  2.   

    两个地方,imdate条件最好改下,不要再字段上用函数
    A.IMDATE >= date '2014-10-21' AND A.IMDATE < date '2014-10-21' + 1第二个,这里似乎用了分页,但是分页的方式不对,order by rn在那里没有意义
    如果不需要排序,则在order by rn那里,加上条件and rownum<16
    然后在最外层,加上order by rn,且在select后面加入提示/*+ first_rows(10)*/ 
      

  3.   

    E和F用的left join ,后面使用了 WHERE F.MC LIKE '%青铜%',这样查询出来的也不能涵盖E的全部记录,有点矛盾
    根据你的业务逻辑调整,下面两种二选一E LEFT JOIN F ON E.WWID=F.WWID AND F.MC LIKE '%青铜%'
    E INNER JOIN F ON E.WWID=F.WWID WHERE F.MC LIKE '%青铜%'
      

  4.   

    F.MC LIKE '%青铜%'
    LIKE效率较低,建议改为
    instr(F.MC,'青铜')>0
      

  5.   

    好的,去除了,这个sql执行的时间超过了4秒,实在hold不住,like的也换了,但是执行时间不是特别理想啊,WWID是主键,现在很乱,我在实习,生产环境一个新需求是我做的,但是就是因为这个sql时间问题,我不敢传上去
      

  6.   

    是的,我这里的确用了分页查询,每页差寻15条数据,oralce分页的用法,目前就是用过rownum的简单方式,不知道在这个sql里面使用的话,怎么样才能分页的更加有效率,大牛能给介绍一下吗?日期的那个地方已经修改了
      

  7.   

    大牛,关于你说的那个加上first_rows(10)*/ 这个真的没有理解呢,就知道是查询结果的前10条,我应该写前15跳,但是这样的话,对于分页的实现,有影响吗?
      

  8.   

    大牛,关于你说的那个加上first_rows(10)*/ 这个真的没有理解呢,就知道是查询结果的前10条,我应该写前15跳,但是这样的话,对于分页的实现,有影响吗?不是查询结果前十条,而是优先返回前几条查询结果。正因为是分页,才更符合该场景
      

  9.   


    SELECT *
      FROM V_SPECINFO A
      left join V_WWPICINFO D on A.WWID = D.WWID
      LEFT JOIN (SELECT F.MC
                   FROM (SELECT WWID, MC
                           FROM V_WWINFO
                         UNION ALL
                         SELECT WWID, MC FROM V_ZRLINFO)) F ON A.WWID = F.WWID
     WHERE A.XZQH = 'un0000'
       AND A.IMDATE = to_date('2014-10-21', 'YYYY-MM-DD')
       AND NOT EXISTS (SELECT 1 FROM V_CANCLE B WHERE A.WWID = B.WWID)