本帖最后由 sxqwhxq 于 2011-08-14 10:56:20 编辑

解决方案 »

  1.   

    这个,第三条实现的效果可能和一二条略有不同,是left join看下执行计划吧!  建议第二条或第三条。
      

  2.   

    谢谢,我用的是sql anywhere ,官方说明书有一段这样的话,不知是否适用于其他数据库:
    “一般而言,使用连接的执行速度要快于多层查询,因此,如有可能,sql anywhere 查询优化程序会将使用多层查询转化为使用连接的查询,这一转化不需要用户做任何操作”
      

  3.   

    官方说明书说的对,也不全对,具体的查询效率要数据库查询优化器如何分配,对于相同的sql,在数据量,索引,连接,子查询,都有不同的效果。
      

  4.   

    select sfid,jzsj,jzje from tabobj,(select sfid from tabhelp where address='红河镇') tabtemp where tabobj.sfid=tabtemp.sfid
    你用这个试试看,这样连接的数量会放到最小
      

  5.   

    用in肯定不可取  因为需要遍历整个子查询的表 所以索引都利用不到b和C得到的结果都可能不一样 无从比较如果将C的left join 换成inner join 效率就应该差不多
      

  6.   

    in未必不是最佳答案。
    如果分两部走,
    第一步取出符合条件的主键第二步将第一步的结果用in在程序里面拼好,再次查询。他的效率未必是很低的。在很多情况下甚至比连接速度还要快。
      

  7.   


    用in 你不遍历怎么取主键呢?难道你自己每个表还做一个hash吗?