首頁 >資料庫 >mysql教程 >何時應選擇 CROSS APPLY 而不是 INNER JOIN 以獲得最佳性能?

何時應選擇 CROSS APPLY 而不是 INNER JOIN 以獲得最佳性能?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-20 11:32:09349瀏覽

When Should You Choose CROSS APPLY Over INNER JOIN for Optimal Performance?

CROSS APPLY 與 INNER JOIN:CROSS APPLY 何時表現優異?

雖然 INNER JOIN 是大多數一對多關係的首選,但 CROSS APPLY 在特定情況下提供顯著的效能優勢。

CROSS APPLY 的主要優點:

INNER JOIN 不同,CROSS APPLY 不強制要求右側表使用使用者定義函數 (UDF)。在處理需要分區或分頁的大型資料集時,這種看似微小的差異變得至關重要。

分區和分頁方面的優勢:

雖然使用 INNER JOINCROSS 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 APPLYJOIN 是最佳選擇。 它在這些場景中的效率使其成為查詢最佳化的寶貴工具。

以上是何時應選擇 CROSS APPLY 而不是 INNER JOIN 以獲得最佳性能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn