簡體   English   中英

將 OUTER APPLY 轉換為 LEFT JOIN

[英]Convert OUTER APPLY to LEFT JOIN

我們有生產緩慢的查詢(由於某些內部原因),

SELECT T2.Date
FROM Table1 T1
OUTER APPLY 
(
    SELECT TOP 1 T2.[DATE] 
    FROM Table2 T2 
    WHERE T1.Col1 = T2.Col1 
    AND T1.Col2 = T2.Col2 
    ORDER BY T2.[Date] DESC
) T2

但是當我轉換為 LEFT JOIN 時,它變得很快,

SELECT Max(T2.[Date])
FROM Table1 T1
LEFT JOIN Table2 T2
   ON T1.Col1 = T2.Col1 
   AND T1.Col2 = T2.Col2
GROUP BY T1.Col1, T1.Col2

我們可以說兩個查詢是相等的嗎? 如果不是,那么如何正確轉換它。

查詢並不完全相同。 了解這些差異很重要。

如果t1.col1 / t1.col2重復,則第一個查詢為每個重復返回單獨的行。 第二個將它們組合成一行。

如果t1.col1t1.col2NULL ,則第一個查詢將返回NULL的最大日期。 第二個將返回一行和適當的最大值。

也就是說,這兩個查詢應該具有相似的性能,特別是如果您在table2(col1, col2, date)上有索引。 我應該注意到在某些情況下apply方法比join更快,因此相對性能取決於情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM