SQL交叉应用语句性能不佳

SQL交叉应用语句性能不佳,sql,sql-server-2008,optimization,Sql,Sql Server 2008,Optimization,下面的语句执行得出人意料地慢,子表确实保存了很多行,但父表没有,索引看起来不错-我认为有更好的方法来实现这一点 SELECT P.[ID] ,C1.[MinChildDate] ,C2.[MaxChildDate] FROM Parent AS P CROSS APPLY ( SELECT MIN([Date]) AS MinChildDate FROM Child WHERE Child.ParentID=P.ID ) AS C1 CROSS APPLY ( SELECT MAX([D

下面的语句执行得出人意料地慢,子表确实保存了很多行,但父表没有,索引看起来不错-我认为有更好的方法来实现这一点

SELECT P.[ID] 
,C1.[MinChildDate]
,C2.[MaxChildDate]
FROM Parent AS P
CROSS APPLY
(
SELECT 
MIN([Date]) AS MinChildDate
FROM Child 
WHERE Child.ParentID=P.ID
) AS C1
CROSS APPLY
(
SELECT 
MAX([Date]) AS MAXChildDate
FROM Child 
WHERE Child.ParentID=P.ID
) AS C2

删除一个
交叉应用
,以将
子表的逻辑读取减半

SELECT P.[ID] 
,C1.[MinChildDate]
,C1.[MaxChildDate]
FROM Parent AS P
CROSS APPLY
(
SELECT 
MIN([Date]) AS MinChildDate,
MAX([Date]) AS MAXChildDate
FROM Child 
WHERE Child.ParentID=P.ID
) AS C1

删除一个
交叉应用
,以将
子表的逻辑读取减半

SELECT P.[ID] 
,C1.[MinChildDate]
,C1.[MaxChildDate]
FROM Parent AS P
CROSS APPLY
(
SELECT 
MIN([Date]) AS MinChildDate,
MAX([Date]) AS MAXChildDate
FROM Child 
WHERE Child.ParentID=P.ID
) AS C1

只需使用一个简单的分组查询:

SELECT
      P.[ID]
    , MIN(child.[Date]) AS MinChildDate
    , MAX(child.[Date]) AS MAXChildDate
FROM Parent AS P
      INNER JOIN Child ON P.ID = Child.ParentID
GROUP BY
      P.[ID]
;

只需使用一个简单的分组查询:

SELECT
      P.[ID]
    , MIN(child.[Date]) AS MinChildDate
    , MAX(child.[Date]) AS MAXChildDate
FROM Parent AS P
      INNER JOIN Child ON P.ID = Child.ParentID
GROUP BY
      P.[ID]
;