下面是存储过程一个游标的select语句(P_STS1,P_STS2,P_FLG,P_FILE_ID为传进来得参数):
SELECT A.aa
      ,A.ab
      ,A.ac
      ,A.ad
      ,C.ca
      ,C.cb
      ,C.cc
FROM   A,B,C WHERE A.a0    =  B.a0
AND   A.aa    =  B.aa
AND   A.ab    =  B.ab
AND   A.ac    =  B.ac
AND   A.ad    =  B.adAND   A.a0    =  C.a0
AND   A.aa    =  C.aa
AND   A.ab    =  C.ab
AND   A.ac    =  C.ac
AND   A.ad    =  C.adAND   B.file_id  =  C.file_idAND   A.ae   >= P_STS1
AND   A.ae   <= P_STS2AND   b.ba  =  P_FLGAND   (( P_FILE_ID IS NOT NULL  AND 
         B.file_id <> P_FILE_ID)  AND 
         C.cc <> P_SUB_SYSTEM)
      OR P_FILE_ID IS  NULL)请问如何优化这个sql语句,where条件如何排序,A B C三个表建什么样的索引?
谢谢!!!

解决方案 »

  1.   

    用用左连接试试SELECT   A.aa 
                ,A.ab 
                ,A.ac 
                ,A.ad 
                ,C.ca 
                ,C.cb 
                ,C.cc 
    FROM       A  
    left  join B  on  ( A.a0         =     B.a0 
    AND       A.aa         =     B.aa 
    AND       A.ab         =     B.ab 
    AND       A.ac         =     B.ac 
    AND       A.ad         =     B.ad)left join  C   on 
           (   A.a0         =     C.a0 
    AND       A.aa         =     C.aa 
    AND       A.ab         =     C.ab 
    AND       A.ac         =     C.ac 
    AND       A.ad         =     C.ad 
    )where     B.file_id     =     C.file_id AND       A.ae       > =   P_STS1 
    AND       A.ae       <=   P_STS2 AND       b.ba     =     P_FLG AND       (((   P_FILE_ID   IS   NOT   NULL     AND   
                      B.file_id   <>   P_FILE_ID)     AND   
                      C.cc   <>   P_SUB_SYSTEM) 
                OR   P_FILE_ID   IS     NULL) 我会的不多,希望可以帮到LZ