0

私はそれほど高度なSQLユーザーではありません。次のクエリを見直していただけますか? または、より最適化された、より読みやすい何かを行うことができますか?

      select  Distinct  DT.Station  , DT.Slot , DT.SubSlot, DT.CompID , CL.CompName
            from    (
                        select  Station, Slot, SubSlot, CompID
                        from    DeTrace
                        where   DeviceID = '1151579773'     
                    ) as DT 
            Left outer CList as CL  
                  on  DT.CompID = CL.CompID 
                  where CL.CompName = '9234220'
                  order by CompName 

手伝ってくれてありがとう。

4

5 に答える 5

2

次のようにすると読みやすくなります。

 select  Distinct  DT.Station  , DT.Slot , DT.SubSlot, DT.CompID , CL.CompName
            from  DeTrace DT    
            Left outer join CList as CL  
                  on  DT.CompID = CL.CompID 
                  where CL.CompName = '9234220'
                    and DT.DeviceID = '1151579773'
                  order by CompName 

オプティマイザーは、このクエリをあなたのクエリと同じくらい効率的に実行できるはずですが、念のためにクエリ実行プランを確認する必要があります。

于 2013-05-22T10:30:11.920 に答える
0

サブクエリは必要ないと思います。以下を確認してください。

select  Distinct  DT.Station  , DT.Slot , DT.SubSlot, DT.CompID , CL.CompName            
from    DeTrace as DT 
Left outer CList as CL  
on  DT.CompID = CL.CompID 
where CL.CompName = '9234220' and DeviceID = '1151579773'     
            order by CompName 
于 2013-05-22T10:30:42.750 に答える
0

それだけではない理由:

SELECT DISTINCT DT.Station  , DT.Slot , DT.SubSlot, DT.CompID , CL.CompName
FROM DeTrace DT
LEFT OUTER JOIN CList CL ON DT.CompID = CL.CompID
                       AND DT.DeviceID = '1151579773'
                       AND CL.CompName = '9234220'
ORDER BY CL.CompName
于 2013-05-22T10:29:28.290 に答える
0

私はこの方法が一番好きです:

SELECT  DISTINCT
        DeTrace.Station,
        DeTrace.Slot,
        DeTrace.SubSlot,
        DeTrace.CompID,
        CL.CompName
    FROM
        DeTrace
    LEFT OUTER JOIN
        CList AS CL ON
            DeTrace.CompID = CL.CompID
    WHERE
        DeviceID = '1151579773' AND
        CL.CompName = '9234220'
    ORDER BY
        CL.CompName
于 2013-05-22T10:34:07.047 に答える
0
select  Distinct  DT.Station  , DT.Slot , DT.SubSlot, DT.CompID , CL.CompName                  
from    DeTrace DT
Left outer join CList as CL  
          on  DT.CompID = CL.CompID 
where DT.DeviceID = '1151579773' 
and  CL.CompName = '9234220'    
order by CL.CompName

Sql Server Cost Based Optimizer は、条件を適用する最も効率的な順序を決定できる必要があります。

于 2013-05-22T10:34:38.803 に答える