有两表:出库材料清单表A,库存表B
现想查询A表中的每个材料的出库数量,在B表中是否有足够的库存(B表中的,一个材料会有多条库存记录)?我想到的是有三种方法:
1.FOR LOOP
2.LEFT JOIN
3.EXISTS
哪一种效率会更好呢? 为什么?他们的执行方式各是什么样的?上面是一种很常见的场景. 由于本人非常不精通数据库技术.所以特请教大家! 谢谢!!!

解决方案 »

  1.   

    exists怕是不行
    前两种都可以用到索引,如果有的话
    效率会比较高。
      

  2.   

    你的主要目的只是为了读出出库材料清单表A,的数据对吧?
    如果是这样建议使用exists.因为exists是返回一个匹配行,有结果就返回
    效率会比较高。exists同样会走索引。如果2个表中的数据都需要读取的话。使用b比较合适。满足要求,效率也不错。loop通常效率是3种中最低的。
      

  3.   

    我比较建议用exists select*from B where exists(select 1 from A where A.ID=B.ID and A.在库<B.在库)
      

  4.   

    exists 
    这个效率很好,有结果就返回
    for loop 必须抛弃,等同于In了,全表遍历了。
    左链接的效率我觉得不如exists,左链接要先做交叉连接,然后才算出左连接。
      

  5.   

    支持exists 特别是数据量大的时候
      

  6.   

    [quoto]说那么多干嘛,直接看执行计划[quoto]
    顶一个,进行sql性能测试,哪个效率高永哪个。
      

  7.   

    晕,单词写错了。
    [Quote]说那么多干嘛,直接看执行计划[Quote]
      

  8.   

    有关联的话 left join 的效率会好点
      

  9.   

    可以直接看下SQL语句的cost是多少就可以看到了效率了