ホームページ >データベース >mysql チュートリアル >CROSS APPLY と INNER JOIN: CROSS APPLY の方がパフォーマンスが向上するのはどのような場合ですか?

CROSS APPLY と INNER JOIN: CROSS APPLY の方がパフォーマンスが向上するのはどのような場合ですか?

DDD
DDDオリジナル
2025-01-20 11:42:10904ブラウズ

CROSS APPLY vs. INNER JOIN: When Does CROSS APPLY Offer Better Performance?

CROSS APPLY と INNER JOIN のパフォーマンス比較

CROSS APPLY は、大規模なデータ セットを扱う場合、INNER JOIN よりも効率的な代替手段と考えられます。どちらの手法も特定のシナリオでは同様の実行プランを生成する可能性がありますが、場合によっては、CROSS APPLY がパフォーマンスに大きな利点をもたらす可能性があります。

クロス適用の定義

CROSS APPLY は、指定された式に基づいて入力行ごとに新しい行を作成するテーブル値関数です。 INNER JOIN とは異なり、テーブル間の結合条件は必要ありません。

CROSS APPLY に適用可能なシナリオ

CROSS APPLY は、単純な結合条件を使用して簡単に定義できない複雑な操作を扱う場合に便利です。たとえば、最初のテーブルの行ごとに 2 番目のテーブルから指定された数のレコードを選択するタスクは、CROSS APPLY で簡単に処理できます。この使用例を示すクエリは次のとおりです:

<code class="language-sql">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>

上記のクエリでは、CROSS APPLY は、「t1」テーブルの各行に対して「t2」テーブルから 3 つの最新レコードを選択します。この操作は、異なるテーブルから関連データを抽出する場合に特に便利です。

パフォーマンスの比較

CROSS APPLY のパフォーマンス上の利点を説明するために、次のシナリオを考えてみましょう:

  • 「メイン」テーブルに 20,000,000 レコードを含むデータセット。
  • 「メイン」テーブルを 2 行だけを含む別のテーブルと結合するクエリ。

CTE とウィンドウ関数を使用して CROSS APPLY をシミュレートするクエリを実行する場合、クエリには約 30 秒かかります。ただし、CROSS APPLY を直接使用すると、クエリはすぐに実行されます。これは、行ごとの反復を伴う複雑な操作を処理する際の CROSS APPLY の効率性を示しています。

結論

要約すると、INNER JOIN は複数のテーブルのデータを結合する標準的な方法ですが、CROSS APPLY は特定の状況、特に行ごとの処理を必要とする複雑な操作を扱う場合に利点があります。 CROSS APPLY の利点を理解することで、開発者は SQL クエリのパフォーマンスを最適化し、複雑なデータ抽出タスクをより効率的に処理できるようになります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。