Skip to main content
これらの設定は system.settings で確認でき、ソースコード から自動生成されています。

enable_join_fixed_hash_table_conversion

キーが値域の小さい単一の整数である場合に、join 用のハッシュテーブルをフラットな配列に変換できるようにします。

enable_join_key_only_hash_tables

結果に右側の行由来の値が決して含まれない join、すなわち LEFT ANTI および右側のカラムが選択されていない場合の LEFT SEMI では、右側の行への参照を持たず結合キーのみを格納する ハッシュテーブル を使用します。この種の ハッシュテーブル は cell が小さく、右側の block を保持せずに drop できます。

enable_join_runtime_filters

実行時に右側から収集した結合キーの集合で左側をフィルタリングします。

enable_join_runtime_filters_index_analysis

ビルド側で収集したランタイムフィルタを使い、JOINのプローブ側のグラニュールを刈り込みます。enable_join_runtime_filtersを参照してください。 use_skip_indexes_on_data_read = 1の場合にのみ効果があります。 刈り込みの対象となるのは、プローブ側の主キー列であるか、minmax、set、bloom_filterのいずれかのスキップ索引でカバーされている結合キーのみです。 ランタイムフィルタがキーの正確な値を保持している場合、それらの値を含むIN集合を刈り込み条件に使用します。それ以外の場合はキーの最小値から最大値までの範囲を使用しますが、刈り込み効果は低くなります。 結合のプローブ側をローカルで読み取る場合にのみ有効です。刈り込みを制御するディスクリプタは、クエリプランの最適化時に読み取りステップに付与されますが、そのステップをリモート実行用に再構築する際には引き継がれません。そのため、並列レプリカ (enable_parallel_replicas = 1) または分散クエリプラン (make_distributed_plan = 1) では、グラニュールの刈り込みは行われません。これらのモードでは、この設定は効果を持ちません。クエリの結果は変わらず、JOINランタイムフィルタ自体もこの設定を無効にした場合とまったく同じように動作します。行われなくなるのはグラニュールの刈り込みだけです。 プローブ側をFINALで読み取る場合も、グラニュールの刈り込みは行われません (FINALを使用した読み取りでは刈り込みが実装されておらず、optimizeLazyFinalはディスクリプタなしで読み取りを再構築します) 。処理待ちのデータ、ALTERミューテーション、またはパッチパートがあるテーブルでも同様です。これらの場合も、この設定は効果を持ちません。

enable_join_transitive_predicates

既存の JOIN 条件から、推移的な等値 JOIN 述語を推論します。 たとえば、A.x = B.x と B.x = C.x が与えられている場合、新たに A.x = C.x という述語 が追加され、JOIN 順序オプティマイザが (A JOIN C) のような直接的なプランを検討できるようになります。