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]
;