Sql server select子句中的子查询与应用运算符性能

Sql server select子句中的子查询与应用运算符性能,sql-server,tsql,Sql Server,Tsql,我正在测试select子句和EXTER apply中相关子查询的性能。为什么select子句中的相关子查询的性能要优于外部应用 -select中的相关子查询-- SELECT (SELECT TOP 1 L.LineNum FROM RDR1 L WHERE T1.Docentry = L.DocEntry ORDER BY L.Linenum DESC) as LineNum, T1.Docentry, T1.Docdate, T

我正在测试select子句和EXTER apply中相关子查询的性能。为什么select子句中的相关子查询的性能要优于外部应用

-select中的相关子查询--

SELECT
    (SELECT TOP 1 
         L.LineNum
     FROM RDR1 L
     WHERE T1.Docentry = L.DocEntry
     ORDER BY L.Linenum DESC) as LineNum,
   T1.Docentry, T1.Docdate, T1.CardCode, *
FROM 
   ORDR T1

--36 sec--
-外敷-

SELECT
   L.LineNum,T1.Docentry,T1.Docdate,T1.CardCode,*
FROM 
   ORDR T1
OUTER APPLY
   (SELECT TOP 1 
        T2.LineNum
    FROM RDR1 T2
    WHERE T1.Docentry = T2.DocEntry
    ORDER BY T2.Linenum DESC) as L
--42sec--

你们看了查询计划了吗

Select max(T2.LineNum), T1.Docentry, T1.Docdate, T1.CardCode
  FROM ORDR T1
  join RDR1 t2 
    on T1.Docentry = T2.DocEntry 
 group by T1.Docentry, T1.Docdate, T1.CardCode

谢谢我们可以使用这段代码,但我想说的是,通常应用的速度应该比相关的子查询快。您看过查询计划了吗?我建议你在这两种情况下都应该使用这个。实际上,您需要使用查询和数据进行测试。