ホームページ > データベース > mysql チュートリアル > 最適なパフォーマンスを得るには、どのような場合に INNER JOIN ではなく CROSS APPLY を選択する必要がありますか?

最適なパフォーマンスを得るには、どのような場合に INNER JOIN ではなく CROSS APPLY を選択する必要がありますか?

Mary-Kate Olsen
リリース: 2025-01-20 11:32:09
オリジナル
349 人が閲覧しました

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

CROSS APPLY と INNER JOIN: CROSS APPLY が有効になるのはどのような場合ですか?

ほとんどの 1 対多の関係では 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 行の上位 3 つの t1 レコードを効率的に取得します。 INNER JOIN を使用してこの機能を複製すると、大幅に複雑になり、効率が低下します。

パフォーマンスベンチマーク:

20,000,000 レコードのテーブルでのテストでは劇的な違いが示されました。CROSS APPLY はほぼ瞬時に実行されましたが、CTE とウィンドウ関数を使用した同等の INNER JOIN クエリには約 30 秒かかりました。

要約:

CROSS APPLY は、明示的な JOIN 条件が利用できない場合、または大規模なデータセットのパーティション化やページネーションを扱う場合に優れた選択肢です。 このようなシナリオでの効率性により、クエリ最適化のための非常に貴重なツールとなります。

以上が最適なパフォーマンスを得るには、どのような場合に INNER JOIN ではなく CROSS APPLY を選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート