CROSS APPLY 與 INNER JOIN:CROSS APPLY 何時表現優異?
雖然 INNER JOIN
是大多數一對多關係的首選,但 CROSS APPLY
在特定情況下提供顯著的效能優勢。
CROSS APPLY 的主要優點:
與 INNER JOIN
不同,CROSS APPLY
不強制要求右側表使用使用者定義函數 (UDF)。在處理需要分區或分頁的大型資料集時,這種看似微小的差異變得至關重要。
分區和分頁方面的優勢:
雖然使用 INNER JOIN
和 CROSS APPLY
的簡單查詢可能會產生類似的執行計劃,但 CROSS APPLY
在需要分區或分頁的大型資料集上表現出卓越的效率。 透過消除顯式 JOIN
條件,它允許資料庫最佳化器利用快取的中間結果,從而加快查詢執行速度。
範例:
以下查詢舉例說明了在對左側表的每個行多次迭代右側表時 CROSS APPLY
相對於 INNER JOIN
的優勢:
<code class="language-sql">/* CROSS APPLY */ SELECT t1.*, t2o.* FROM t1 CROSS APPLY ( SELECT TOP 3 * FROM t2 WHERE t2.t1_id = t1.id ORDER BY t2.rank DESC ) t2o</code>
此查詢有效地檢索每個 t2
行的前三個 t1
記錄。 使用 INNER JOIN
複製此功能將明顯更加複雜且效率較低。
效能基準:
在 20,000,000 筆記錄的表上進行的測試顯示出顯著的差異:CROSS APPLY
幾乎立即執行,而使用 CTE 和視窗函數的等效 INNER JOIN
查詢大約需要 30 秒。
總結:
當明確 條件不可用或處理大型資料集的分區或分頁時,CROSS APPLY
JOIN
是最佳選擇。 它在這些場景中的效率使其成為查詢最佳化的寶貴工具。
以上是何時應選擇 CROSS APPLY 而不是 INNER JOIN 以獲得最佳性能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!