我正在查询SQL Server 2012。
我有一个左外连接到一个大的结果集,如下所示:
Data
LEFT OUTER JOIN
(
SELECT
MemberID
,MIN(Date)
FROM
Tables
GROUP BY
MemberID
) T
ON Data.MemberID = T.MemberID
数据已经是一个大型查询(返回了数万行)。
我的问题是:这个嵌套的选择查询是否仅针对“数据”中已有的MemberID进行评估?这似乎已经显着减缓了sproc的速度,有没有更标准的方法呢?或者这只是预料到的?
提前致谢。
答案 0 :(得分:1)
不,对所有行计算子查询。
如果您想要第一行,请执行以下操作:
row_number() over (partition by Memberid order by Date) as seqnum
然后使用:
where seqnum = 1
答案 1 :(得分:0)
最后我使用Gordon Linoffs方法选择第一行,然后在嵌套的select语句
中将Left Outer Join更改为Outer Apply with WHERE条件Data.MemberID = Tables.MemberID
这增加了很多速度。请注意,原始问题的查询版本非常简化,因此在所有情况下,此解决方案可能都不正确。