SQL左外连接使用嵌套选择优化

时间:2014-11-04 14:55:33

标签: sql sql-server ssms-2012

我正在查询SQL Server 2012。

我有一个左外连接到一个大的结果集,如下所示:

Data
LEFT OUTER JOIN
(
    SELECT
        MemberID
        ,MIN(Date)
    FROM
        Tables
    GROUP BY
        MemberID
) T
ON Data.MemberID = T.MemberID

数据已经是一个大型查询(返回了数万行)。

我的问题是:这个嵌套的选择查询是否仅针对“数据”中已有的MemberID进行评估?这似乎已经显着减缓了sproc的速度,有没有更标准的方法呢?或者这只是预料到的?

提前致谢。

2 个答案:

答案 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

这增加了很多速度。请注意,原始问题的查询版本非常简化,因此在所有情况下,此解决方案可能都不正确。