交叉应用与内部连接

Eva*_*kas 3 join sql-server subquery

我最近阅读了很多关于CROSS APPLYvs 的文章INNER JOIN。我尝试编写一些查询,它们都以类似的方式工作,执行计划似乎也相同。

也许有更深入知识的人可以向我解释这两者之间的区别?

OUTER APPLY (SELECT UserID
                , ActionPerformedDate = MAX(ActionDate)
            FROM dbo.AdminUsage
            WHERE SubscriberID = S.SubscriberID
                AND ActionPerformed = 'Some Action'
                AND Description = 'True'
            GROUP BY UserID) AS AU


LEFT JOIN (SELECT SubscriberID
                , UserID
                , MAX(ActionDate) OVER(PARTITION BY SubscriberID) AS ActionPerformedDate
            FROM dbo.AdminUsage
            WHERE ActionPerformed = 'Some Action'
                AND Description = 'True') AS AU
    ON AU.SubscriberID = S.SubscriberID
Run Code Online (Sandbox Code Playgroud)

在这种情况下是否有首选方法?

Dan*_*her 5

它们是两种略有不同的动物,可以用于相同的目的,如您的示例所示。不过,CROSS APPLY 是“加入”表值函数和“扩展”xml 文档的唯一选择。

某些查询,尤其是并行查询,可以使用 CROSS APPLY 显着提高性能,前提是您拥有必要的处理器线程和索引策略。

微软 MVP Itzik Ben-Gan 在本次演讲中阐述了几个很好的例子