RULE模式下
1:和where中等号左右顺序无关
2: 当连接字段在其中一个表中才有索引的时候,和from 顺序无关
3: 当两个表都有索引的时候,from 后面应该是大表放前面
4:两边都没有索引的时候,和 where中顺序仍然无关,但from 中应该大表放后面

解决方案 »

  1.   

    这种情况下,最好在t2表中加入一列short_cd = substr(cd,1,5),那就可以直接用:
    SELECT A.cd1, B.name name1,
           A.cd2, C.name name2
      FROM T1 A, T2 B, T2 C
     WHERE A.cd1 = b.short_cd (+)
       AND A.cd2 = c.short_cd (+);而且如果在short_cd上加上索引的话,系统就能使用索引了,查询速度能提高很多。
      

  2.   

    Out-join简化了程序代码,可是执行效率比较差,也可以用Union来做,执行效率应该会好点.
      

  3.   

    KingSunSha(弱水三千):
    数据库是既定的,我不能随意更改。cyberflying(雁南飞):
    多谢指点。jiezhi(西域浪子):
    如你所说,我只要将B和C放到A的前面,效率就能得到提高了?
      

  4.   

    just try yourself and you can find something
      

  5.   

    SELECT T1.cd1 AS cd1,
            T2.name AS name1,
            T1.cd2 AS cd2,
     FROM T1 left outer join T2 on (cd1=SUBSTR( T2.cd, 1,5 ) and cd2=SUBSTR( T2.cd, 1,5 ))