1,一个exists和inner的语句,那个效率高呢,大家给指点一下,大家一般用的是那个啊?--1, EXISTS sql sentence
SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID
FROM   Routing 
WHERE EXISTS(select 1 from  #DesMRoutingIDTable AddOnRouting where  Routing.RoutingID = AddOnRouting.MID)
AND EXISTS(select 1 from  #airpotIDTable where  #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)--1, INNER join sql sentence
SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID
FROM   Routing 
INNER JOIN
#DesMRoutingIDTable AddOnRouting ON Routing.RoutingID = AddOnRouting.MID
INNER JOIN #airpotIDTable ON #airpotIDTable.aID=Departure_GUID OR #airpotIDTable.aID=FeederGateway_GUID2,还有如果我要去exists表中的数据,如何写,我想取#DesMRoutingIDTable 的ID1和#airpotIDTable的 ID2字段SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID,取(ID1,ID2)
FROM   Routing 
WHERE EXISTS(select 1 from  #DesMRoutingIDTable AddOnRouting where  Routing.RoutingID = AddOnRouting.MID)
AND EXISTS(select 1 from  #airpotIDTable where  #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)
谢谢大家!

解决方案 »

  1.   

    表连接的效率要高些
    所以是inner join
      

  2.   

    to:ws_hgo
    a 啊,刚刚一个人跟我说exists效率高些,我不知道了,大家继续讨论一下啊
      

  3.   

    我是这样想的,
    1,sql在inner join的时候如果join 2张表(表1和表2)这样要做2次的扫描表,就是先扫描
    表1(join)然后再扫描表2,这样就多了一层的循环
    2,如果exists是不是就是一层循环啊,因为都是在exists条件下,同时去表1和表2做比对数据,如果有就返回1啊。个人乱想的,不知道是否理解有误差,说的不对,大家指正
      

  4.   

    我是这样想的, 
    1,sql在inner join的时候如果join 2张表(表1和表2)这样要做2次的扫描表,就是先扫描 
    表1(join)然后再扫描表2,这样就多了一层的循环 for(int)
    {
    跟表表1比对
    }
    for(int)
    {
    跟表表2比对
    }sql要做2次2,如果exists是不是就是一层循环啊,因为都是在exists条件下,同时去表1和表2做比对数据,如果有就返回1啊。 for(int)
    {
    跟表表1比对;
    跟表表2比对就是在一个循环的条件下,这样效率不是高吗?
    }
    个人乱想的,不知道是否理解有误差,说的不对,大家指正 
      

  5.   

    效率高低,选中两条查询语句ctrl+L就能看出来了
      

  6.   

    没有绝对的。exists的效率依赖于匹配度。
    inner join效率比较稳定。select * from ta a where exists(select 1 from tb where a.id=b.id)
    每扫ta一行,都扫tb,遇到匹配即返回ture,对tb的扫描在ta当前行不再继续下去,如果一直没找到,就会扫完tb (索引,或表扫)即是说,匹配度很低,效率就很差。举个极端, tb中每行的id都与ta中每行id相同
    即 ta
    id
    1
    1
    1
    1
    1
    ,,,
    tb
    id
    1
    1
    1
    1
    1
    1
    一扫就有返回,效率极高反之
    ta
    id
    1
    1
    1
    1
    1
    1
    1
    ...
    tb
    id
    0
    0
    0
    0
    0
    0
    ..
    每扫ta一行,都要扫完tb,效率极差。
    内连接效率则稳定。 在不很清楚实际数据分布情况下,最好用内连接。
      

  7.   

    to:fcuandy
    谢谢,这个市真正的答案阿
      

  8.   

    to:fcuandy 还有一个问题,如果是2,还有如果我要去exists表中的数据,如何写,我想取#DesMRoutingIDTable 的ID1和#airpotIDTable的 ID2字段SELECT Routing.Departure_GUID, Routing.FeederGateway_GUID,取(ID1,ID2)
    FROM   Routing 
    WHERE EXISTS(select 1 from  #DesMRoutingIDTable AddOnRouting where  Routing.RoutingID = AddOnRouting.MID)
    AND EXISTS(select 1 from  #airpotIDTable where  #airpotIDTable.aID=Routing.Departure_GUID OR #airpotIDTable.aID=Routing.FeederGateway_GUID)谢谢
      

  9.   

    要取几个表中的列,必须用连接。当然 from ta,tb 这也属于连接。
      

  10.   

    set statistics io on
    --语句
    set statistics io off
      

  11.   

    to:ChinaJiaBing
    set statistics io on 
    --语句 
    set statistics io off 这个是什么意思?