基数保持ジョインの高速化
このトピックでは、テーブルプルーニングを使用して基数保持ジョインを高速化する方法について説明します。この機能は v3.1 以降でサポートされています。
概要
基数保持ジョインは、出力行の基数と重複係数がジョインの入力テーブルの1つと同じままであることを保証します。以下の例を考えてみましょう。
-
Inner Join:
SELECT A.* FROM A INNER JOIN B ON A.fk = B.pk;この場合、
A.fk(外部キー)は NOT NULL であり、B.pk(主キー)を参照しています。Aの各行はBのちょうど1行と一致するため、出力の基数と重複係数はAのものと一致します。 -
Left Join:
SELECT A.* FROM A LEFT JOIN B ON A.fk = B.pk;ここでは、
A.fkはB.pkを参照していますが、A.fkは NULL 値を含むことがあります。Aの各行はBの最大1行と一致します。その結果、出力の基数と重複係数はAと一致したままです。
これらのタイプのジョインでは、最終的な出力列がテーブル A の列にのみ依存し、テーブル B の列が使用されない場合、テーブル B はジョインからプルーニングできます。v3.1 以降、StarRocks は基数保持ジョインでの テーブルプルーニング をサポートしており、これは共通テーブル式 (CTE)、ビュー、およびサブクエリで発生する可能性があります。