ホームページ > データベース > mysql チュートリアル > SQL クエリの UDF が外部結合ではなくデカルト積を生成する場合があるのはなぜですか?

SQL クエリの UDF が外部結合ではなくデカルト積を生成する場合があるのはなぜですか?

Susan Sarandon
リリース: 2024-12-19 01:14:10
オリジナル
894 人が閲覧しました

Why Do UDFs in SQL Queries Sometimes Produce Cartesian Products Instead of Outer Joins?

SQL クエリとデカルト積の UDF

SQL クエリでユーザー定義関数 (UDF) を使用すると、デカルト積が生成される可能性があります意図した完全外部結合の代わりに。デカルト積は、1 つのテーブルのすべての行が別のテーブルのすべての行と結合されるときに発生し、完全外部結合よりもはるかに大きなデータセットが生成されます。

UDF によってデカルト積が発生するのはなぜですか?

UDF では、クエリ エンジンによる最適化を妨げるさらなる複雑さのレベルが導入されます。 UDF は、非決定的な動作を持つ任意の数の引数を受け入れることができます。考えられるすべての行の組み合わせに対して UDF を評価するには、クエリ エンジンはデカルト積を実行する必要があります。

対照的に、列間の単純な等価比較 (例: t1.foo = t2.bar) は予測可能な動作をします。 。クエリ エンジンはこれを使用して、foo 列と bar 列に基づいて行をシャッフルすることで結合を最適化し、デカルト積の必要性を回避できます。

外部結合の強制

残念ながら、上記の例ではデカルト積に対して外部結合を強制する簡単な方法はありません。唯一のオプションは、Spark SQL エンジンを変更することです。

上で説明したように、デカルト積は UDF の任意で非決定的な性質の結果です。クエリ エンジンは、追加の制約を導入せずにそれらを最適化することはできません。

以上がSQL クエリの UDF が外部結合ではなくデカルト積を生成する場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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