select a.nbxh,a.zch,a.qymc,a.hy,a.djjg,a.gxdw,a.glph,a.qylxdl,b.zwwz zwwz  from hz_qyhznr a,wl_jd b 
where (a.zt='K' or a.zt='B') and a.nbxh=b.nbxh(+)  and (b.nbxh is null or b.zwwz='Y')  
and a.qymc like '%企业名称%';//现在用PL/sql developer查询的时候卡在那里,结果一直出不来。如果没有加最后q.qymc的查询条件,结果可以出来。 
表“hz_qyhznr”46万条记录,表“wl_jd”18万条,想要知道怎么去优化该查询,求高手赐教,谢谢

解决方案 »

  1.   

    -- 贴子发一遍就够啦!-- 可以先在表hz_qyhznr的zt字段创建索引:
    CREATE index hz_qyhznr_inx1 on hz_qyhznr(zt);-- 可以先在表wl_jd的nbxh、zwwz字段创建复合索引(最好按字段定义时的顺序去指定索引中的字段顺序)
    CREATE index wl_jd_inx1 on wl_jd(nbxh,zwwz);with t as(SELECT nbxh, zch, qymc, hy, djjg, gxdw, glph, qylxdl from hz_qyhznr WHERE zt='K' or zt='B'),
         b as(SELECT zwwz from wl_jd where zwwz='Y' or nbxh is null),
         a as(select nbxh, zch, qymc, hy, djjg, gxdw, glph, qylxdl from t WHERE qymc like '%企业名称%')
    select a.nbxh,a.zch,a.qymc,a.hy,a.djjg,a.gxdw,a.glph,a.qylxdl,b.zwwz zwwz from a, b
     where a.nbxh=b.nbxh(+);