qiyousyc(沈阳棋友) :
能不能请明示,就这条语句而言,怎么建索引才能起作用??
多谢!

解决方案 »

  1.   

    我想建立一个联合索引应该可以吧,ZBTDP_DJ64.KAISHA_CD,ZBTDP_DJ64.TSUCHI_KBN,ZBTDP_DJ64.TSUCHI_KBN,ZBTDP_DJ64.SHUTSU_YMD
      

  2.   

    HeavenHe() :
    该方法已经试过了,对速度没有什么帮助。
    造成该SQL运行曼的原因是
    (select distinct ZBTDP_MC14.KAISHA_CD,ZBTDP_MC14.HINMEI_CD,ZBTDP_MC14.SBU_CD
            from ZBTDP_MC14
     union
    select distinct ZBTDP_MC15.KAISHA_CD,ZBTDP_MC15.HINMEI_CD,ZBTDP_MC15.SBU_CD
            from ZBTDP_MC15) ZBTDP_MC
    该句。当union后的结果比较多的时候,再与ZBTDP_DJ64关联,需要做全表遍历,慢就慢在这里了。
    多谢!
      

  3.   

    from ZBTDP_DJ64 a,(select distinct ZBTDP_MC14.KAISHA_CD,ZBTDP_MC14.HINMEI_CD,ZBTDP_MC14.SBU_CD from ZBTDP_MC14 where SBU_CD = '02') b,(select distinct ZBTDP_MC15.KAISHA_CD,ZBTDP_MC15.HINMEI_CD,ZBTDP_MC15.SBU_CD from ZBTDP_MC15 where SBU_CD = '02') c where (a.KAISHA_CD=b.KAISHA_CD and a.HINMEI_CD=b.HINMEI_CD) or (a.KAISHA_CD=c.KAISHA_CD and a.HINMEI_CD=c.HINMEI_CD) and a.KAISHA_CD = '000'
        and a.TSUCHI_KBN != '4'
        and a.TSUCHI_KBN != 'C'
        and a.SHUTSU_YMD = '20030101'
      

  4.   

    beckhambobo(beckham) :
    快是快了,但出来的结果不是我所要得。
    多谢
      

  5.   


     1. 分析查询计划,看看每一步都做了什么操作,
        系统的开销主要花在什么地方
     2. 你的SQL 中有distinct关键字,即要做排序操作.
        试着调整 SORT_AREA_SIZE的值.
      

  6.   

    我主要想做一下sql的优化,但是,不知道该如何入手比较好,诸位,有没有更好的建议??
    先谢谢了。(该贴肯定是结的,分不够我再加,希望大家能畅所欲言)
      

  7.   

    我们可以记住一些通用规则,比如查询中尽可能的利用索引,能过滤掉最多数据的条件写在where子句的末尾,在使用子查询的时候要慎重考虑,对于in要仔细衡量,not in要尽量避免使用。表连接的时候要尽量利用索引字段,多表连接的时候要注意连接顺序。还有比如like的使用,不要轻易使用like  %s%这样的条件(like  s%是可以利用索引的),这种匹配的算法再快也有影响。
      

  8.   

    希望这些对你有一些用!如果可以,下载lecco公司的sql expert进行优化吧,还可以的!
      

  9.   

    xstarsky(xhappy):
    非常感谢!!
      

  10.   

    试试下面这个方法。我分析你原来的曼的原因,很大程度上是在union的时候没有任何条件限制。而查询中,条件基本上都是针对zbtdp_dj64,所以......
    SELECT COUNT(*) AS counter 
    FROM zbtdp_dj64 T64
    WHERE ZBTDP_MC.SBU_CD = '02'
        AND ZBTDP_DJ64.KAISHA_CD = '000'
        AND ZBTDP_DJ64.TSUCHI_KBN != '4'
        AND ZBTDP_DJ64.TSUCHI_KBN != 'C'
        AND ZBTDP_DJ64.SHUTSU_YMD = '20030101'
    AND ( EXISTS( 
        SELECT 1
            FROM ZBTDP_MC14  T14
    WHERE T64.KAISHA = T14.KAISHA_CD
    AND T64.HINMEI_CD = T14.HINMEI_CD
    )
    OR EXISTS(
      SELECT 1
              FROM ZBTDP_MC15  T15
     WHERE T64.KAISHA = T15.KAISHA_CD
     AND T64.HINMEI_CD = T15.HINMEI_CD
    )
    );