> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# query_plan_* セッション設定

> query_plan_* グループで生成される ClickHouse のセッション設定。

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            実験的な機能
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["バージョン", "デフォルト値", "コメント"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        バージョン履歴
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>デフォルト値</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          再起動せずに変更可能
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

これらの設定は [system.settings](/ja/reference/system-tables/settings) で確認でき、[ソース](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) から自動生成されています。

<div id="query_plan_aggregation_in_order">
  ## query\_plan\_aggregation\_in\_order
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "22.12"},{"label": "1"},{"label": "クエリプランに関する一部のリファクタリングを有効にする"}]}]} />

集約における in-order のクエリプランレベル最適化を切り替えます。
設定 [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは開発者がデバッグ目的でのみ使用すべき、上級者向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_convert_any_join_to_semi_or_anti_join">
  ## query\_plan\_convert\_any\_join\_to\_semi\_or\_anti\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "新しい設定"}]}]} />

JOIN の後のフィルタが、不一致の行または一致した行に対して常に false と評価される場合に、ANY JOIN を SEMI JOIN または ANTI JOIN に変換できるようにします

<div id="query_plan_convert_join_to_in">
  ## query\_plan\_convert\_join\_to\_in
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "新しい設定"}]}]} />

出力カラムが左テーブルにのみ関連している場合に、`JOIN` を `IN` を使ったサブクエリに変換できるようにします。非 ANY JOIN (たとえばデフォルトの ALL JOIN) では、誤った結果になる可能性があります。

<div id="query_plan_convert_outer_join_to_inner_join">
  ## query\_plan\_convert\_outer\_join\_to\_inner\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.4"},{"label": "1"},{"label": "`JOIN` 後のフィルタで常にデフォルト値が除外される場合、`OUTER JOIN` を `INNER JOIN` に変換できるようにしました"}]}]} />

`JOIN` 後のフィルタで常にデフォルト値が除外される場合、`OUTER JOIN` を `INNER JOIN` に変換できるようにします

<div id="query_plan_direct_read_from_text_index">
  ## query\_plan\_direct\_read\_from\_text\_index
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.2"},{"label": "1"},{"label": "テキスト索引がGAになりました"}]}, {"id": "row-2","items": [{"label": "25.9"},{"label": "1"},{"label": "新しい設定"}]}]} />

クエリプランで、転置テキスト索引のみを使用した全文検索のフィルタリングを可能にします。

<div id="query_plan_display_internal_aliases">
  ## query\_plan\_display\_internal\_aliases
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "0"},{"label": "新しい設定"}]}]} />

EXPLAIN PLAN で、元のクエリで指定された別名ではなく、内部別名 (\_\_table1 など) を表示します。

<div id="query_plan_enable_multithreading_after_window_functions">
  ## query\_plan\_enable\_multithreading\_after\_window\_functions
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

ウィンドウ関数の評価後にマルチスレッドを有効にし、並列ストリーム処理を可能にします

<div id="query_plan_enable_optimizations">
  ## query\_plan\_enable\_optimizations
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

クエリプランレベルでのクエリ最適化の有効/無効を切り替えます。

<Note>
  これは上級者向けの設定であり、開発者がデバッグ目的にのみ使用してください。この設定は今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - クエリプランレベルのすべての最適化を無効にする
* 1 - クエリプランレベルの最適化を有効にする (ただし、個々の最適化はそれぞれの設定によって無効にされる場合があります)

<div id="query_plan_execute_functions_after_sorting">
  ## query\_plan\_execute\_functions\_after\_sorting
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

ソート処理の後に式を移動するクエリプランレベルの最適化を切り替えます。
この設定は、[`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは開発者がDebug目的でのみ使用すべきexpert-level settingです。この設定は今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_filter_push_down">
  ## query\_plan\_filter\_push\_down
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

実行計画内でフィルターをより下位へ押し下げる、クエリプランレベルの最適化の有効/無効を切り替えます。
設定 [query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは上級者向けの設定であり、開発者がデバッグ目的でのみ使用すべきです。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_join_shard_by_pk_ranges">
  ## query\_plan\_join\_shard\_by\_pk\_ranges
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "0"},{"label": "新しい設定"}]}]} />

両方のテーブルで、結合キーに PRIMARY KEY のプレフィックスが含まれている場合は、JOIN に対して分片化を適用します。hash、parallel\_hash、full\_sorting\_merge、parallel\_full\_sorting\_merge アルゴリズムでサポートされています。通常、クエリの高速化にはつながりませんが、メモリ消費量を抑えられる場合があります。

<div id="query_plan_join_swap_table">
  ## query\_plan\_join\_swap\_table
</div>

<SettingsInfoBlock type="BoolAuto" default_value="auto" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.12"},{"label": "auto"},{"label": "新しい設定。以前は常に右テーブルが選択されていました。"}]}]} />

クエリプランにおいて、結合のどちら側をビルドテーブル (inner とも呼ばれ、ハッシュ結合ではハッシュテーブルに挿入される側) にするかを決定します。この設定は、`JOIN ON` 句を使用する `ALL` join strictness でのみサポートされています。設定可能な値は次のとおりです。

* 'auto': どのテーブルをビルドテーブルとして使用するかをプランナーが決定します。
* 'false': テーブルを入れ替えません (右テーブルがビルドテーブルになります) 。
* 'true': 常にテーブルを入れ替えます (左テーブルがビルドテーブルになります) 。

<div id="query_plan_lift_up_array_join">
  ## query\_plan\_lift\_up\_array\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

実行計画内で ARRAY JOIN を上位に移動する、クエリプランレベルの最適化を切り替えます。
この設定は、[query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは上級者向けの設定であり、開発者がデバッグ目的でのみ使用してください。この設定は、将来後方互換性のない形で変更されるか、削除される可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_lift_up_union">
  ## query\_plan\_lift\_up\_union
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

クエリプラン内のより大きな部分木をユニオンへ移動し、追加の最適化を可能にするクエリプランレベルの最適化をトグルします。
この設定は [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは開発者がデバッグ用途でのみ使用すべき上級者向けの設定です。将来的に後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_max_limit_for_join_lazy_indexing">
  ## query\_plan\_max\_limit\_for\_join\_lazy\_indexing
</div>

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1000"},{"label": "クエリプランを使用した JOIN の遅延索引最適化を利用できる上限値を制御する新しい設定を追加しました。0 の場合、制限はありません"}]}]} />

JOIN の遅延索引最適化でクエリプランを使用できる上限値を制御します。0 の場合、制限はありません。

<div id="query_plan_max_limit_for_lazy_materialization">
  ## query\_plan\_max\_limit\_for\_lazy\_materialization
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "10"},{"label": "遅延マテリアライゼーションの最適化にクエリプランを使用できる最大制限値を制御する新しい設定を追加しました。0 の場合、制限はありません"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10000"},{"label": "パフォーマンス改善後に制限値を引き上げました"}]}, {"id": "row-3","items": [{"label": "25.11"},{"label": "100"},{"label": "さらに最適化"}]}]} />

遅延マテリアライゼーションの最適化にクエリプランを使用できる最大制限値を制御します。0 の場合、制限はありません。

<div id="query_plan_max_limit_for_top_k_optimization">
  ## query\_plan\_max\_limit\_for\_top\_k\_optimization
</div>

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1000"},{"label": "新しい設定"}]}]} />

minmax スキップ索引と動的しきい値フィルタリングを使用した TopK 最適化のクエリプラン評価を可能にする最大リミット値を制御します。0 の場合、制限はありません。

<div id="query_plan_max_optimizations_to_apply">
  ## query\_plan\_max\_optimizations\_to\_apply
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

クエリプランに適用する最適化の総数を制限します。設定 [query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) を参照してください。
複雑なクエリで最適化に時間がかかりすぎるのを防ぐのに役立ちます。
EXPLAIN PLAN クエリでは、この上限に達すると最適化の適用を停止し、その時点のプランをそのまま返します。
通常のクエリ実行では、実際の最適化回数がこの設定値を超えると、例外が発生します。

<Note>
  これは上級者向けの設定であり、開発者がデバッグ目的でのみ使用すべきです。この設定は今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

<div id="query_plan_max_set_size_for_projection_match">
  ## query\_plan\_max\_set\_size\_for\_projection\_match
</div>

<SettingsInfoBlock type="UInt64" default_value="10000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "10000"},{"label": "projection matcher（現時点では aggregate projection）で、内容ハッシュ化された IN 句の Set のコストに上限を設ける新しい設定を追加しました。上限を超える Set は不一致として扱われます。0 を指定すると内容ハッシュ比較は完全に無効化されます（互換性設定の値: IN-set を含む node では projection match は決して成功しません）。"}]}]} />

projection matcher が 2 つの Set が等しいかどうかを判定する際に、内容ハッシュを計算して比較する `IN` 句の Set の最大行数です。これを超える Set は不一致として扱われ、projection はスキップされます。0 を指定すると内容ハッシュ比較は完全に無効化されます。この場合、`IN` 句の Set を含む node では projection match は決して成功しません。

aggregate projection matcher (および、`IN` 句の Set を比較する必要がある将来の projection matcher) で使用されます。内容ハッシュの計算量は、Set の elements 数に対して `O(N log N)` です。この設定は、クエリまたは projection に多数の `IN` 句が現れる場合に、プランニング時に発生するコストを抑えるためのものです。

<div id="query_plan_max_step_description_length">
  ## query\_plan\_max\_step\_description\_length
</div>

<SettingsInfoBlock type="UInt64" default_value="500" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "500"},{"label": "新しい設定"}]}]} />

EXPLAIN PLAN におけるステップの説明の最大長。

<div id="query_plan_merge_expression_into_join">
  ## query\_plan\_merge\_expression\_into\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "1"},{"label": "新しい設定。JOIN 順序の最適化時に、Expression ステップを JOIN ステップにマージできるようにします。"}]}]} />

JOIN 順序の最適化時に、式を JOIN ステップにマージできるようにします。

<div id="query_plan_merge_expressions">
  ## query\_plan\_merge\_expressions
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

連続するフィルタをマージするクエリプランレベルの最適化を切り替えます。
この設定は、[query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは、開発者がデバッグ目的でのみ使用すべき高度な設定です。この設定は、将来的に後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_merge_filter_into_join_condition">
  ## query\_plan\_merge\_filter\_into\_join\_condition
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "フィルターを結合条件にマージする新しい設定を追加"}]}]} />

フィルターを `JOIN` 条件にマージし、`CROSS JOIN` を `INNER` に変換できるようにします。

<div id="query_plan_merge_filters">
  ## query\_plan\_merge\_filters
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "クエリプラン内のフィルタをマージできるようにします"}]}, {"id": "row-2","items": [{"label": "24.11"},{"label": "1"},{"label": "クエリプラン内のフィルタをマージできるようにします。これは、アナライザで filter-push-down を適切にサポートするために必要です。"}]}]} />

クエリプラン内のフィルタをマージできるようにします。

<div id="query_plan_min_columns_for_join_lazy_indexing">
  ## query\_plan\_min\_columns\_for\_join\_lazy\_indexing
</div>

<SettingsInfoBlock type="UInt64" default_value="3" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "3"},{"label": "JOIN で遅延索引最適化を有効にするために必要な、左側の payload カラムの最小数を制御します"}]}]} />

JOIN で遅延索引最適化を有効にするために必要な、左側の payload カラムの最小数を制御します。0 はこの最適化が無効であることを意味します。

<div id="query_plan_optimize_count_from_text_index">
  ## query\_plan\_optimize\_count\_from\_text\_index
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "新しい設定"}]}]} />

一致する行をマテリアライズすることなく、テキスト索引のポスティングリストのカーディナリティから直接 `SELECT count() ... WHERE <text search predicate>` に応答できるようにします。
`query_plan_direct_read_from_text_index` が有効な場合にのみ有効です。

<div id="query_plan_optimize_join_order_algorithm">
  ## query\_plan\_optimize\_join\_order\_algorithm
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="JoinOrderAlgorithm" default_value="greedy" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "greedy"},{"label": "新しい実験的な設定"}]}]} />

クエリプランの最適化時に試行する JOIN 順序アルゴリズムを指定します。利用可能なアルゴリズムは次のとおりです。

* 'greedy' - 基本的な貪欲アルゴリズムです。高速に動作しますが、最適な JOIN 順序にならない場合があります
* 'dpsize' - 現時点では INNER JOIN のみに対応する DPsize アルゴリズムを実装します。考えられるすべての JOIN 順序を検討して最適なものを見つけますが、テーブル数や JOIN 条件が多いクエリでは遅くなることがあります。
* 'dpsub' - INNER JOIN と INNER JOIN 以外の JOIN の両方に対応する DPsub アルゴリズムを実装します。考えられるすべての JOIN 順序を検討して最適なものを見つけますが、テーブル数や JOIN 条件が多いクエリでは遅くなることがあります。
* 'dphyp' - 現時点では INNER JOIN のみに対応する DPhyp (ハイパーグラフ分割による動的計画法) アルゴリズムを実装します。`dpsize` と同じ探索空間を調べますが、連結された部分グラフのペアだけを列挙するため、クロス積を考慮しない代わりに、スパースな JOIN グラフでは中間 JOIN の数を減らせます
  複数のアルゴリズムは、たとえば `dphyp,greedy` のようにカンマ区切りのリストで指定できます。指定した順に試行され、あるアルゴリズムでクエリを処理できない場合 (たとえば OUTER JOIN や非連結なコンポーネントがある場合) は、フォールバックとして次のアルゴリズムが使用されます。

<div id="query_plan_optimize_join_order_limit">
  ## query\_plan\_optimize\_join\_order\_limit
</div>

<SettingsInfoBlock type="UInt64" default_value="10" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.9"},{"label": "1"},{"label": "新しい設定"}]}, {"id": "row-2","items": [{"label": "25.12"},{"label": "10"},{"label": "デフォルトでより多くのテーブルに対する JOIN の並べ替えを許可"}]}]} />

同じサブクエリ内の JOIN 順序を最適化します。現在のところ、ごく限られたケースでのみサポートされています。
値は、最適化対象とするテーブルの最大数です。

<div id="query_plan_optimize_join_order_max_searched_plans">
  ## query\_plan\_optimize\_join\_order\_max\_searched\_plans
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="100000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "100000"},{"label": "JOIN 順序オプティマイザが次のアルゴリズムにフォールバックする前に列挙する部分プラン数を制限するための新しい設定。"}]}]} />

`query_plan_optimize_join_order_algorithm` で、JOIN 順序オプティマイザが打ち切って次のアルゴリズムにフォールバックするまでに列挙できる部分プランの最大数です。
これにより、クリークやスターのように探索空間が指数関数的に増大する密な JOIN グラフにおいて、optimization 時間を決定論的に制限できます (実時間には依存しません) 。
制限を無効にするには 0 に設定します。既定の `query_plan_optimize_join_order_limit` では探索が常にこの上限を十分下回るため、影響はありません。

<div id="query_plan_optimize_join_order_randomize">
  ## query\_plan\_optimize\_join\_order\_randomize
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "テスト用に JOIN 順序の統計をランダム化する新しい設定。"}]}]} />

0 以外の値を設定すると、JOIN 順序オプティマイザは実際の統計の代わりに、ランダムに生成されたカーディナリティと NDV を使用します。
1 に設定するとランダムシードが生成され、1 より大きい値に設定すると、その値がシードとして直接使用されます。
これは、異なる JOIN 順序によって発生するエラーを見つけるためのテストを目的としています。

<div id="query_plan_optimize_lazy_final">
  ## query\_plan\_optimize\_lazy\_final
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "主キーのセットを構築し、それを索引解析に使用することで、ReplacingMergeTree に対する FINAL 付きの読み取りを最適化する新しい設定"}]}]} />

主キーのセットを構築し、それを索引解析に使用することで、ReplacingMergeTree に対する FINAL 付きの読み取りを最適化します。

<div id="query_plan_optimize_lazy_materialization">
  ## query\_plan\_optimize\_lazy\_materialization
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.4"},{"label": "1"},{"label": "遅延マテリアライゼーションの最適化でクエリプランを使用するための新しい設定を追加"}]}]} />

遅延マテリアライゼーションの最適化でクエリプランを使用します。

<div id="query_plan_optimize_lazy_materialization_for_object_storage">
  ## query\_plan\_optimize\_lazy\_materialization\_for\_object\_storage
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "オブジェクトストレージから Parquet ファイル（Iceberg テーブルを含む）を読み取る `ORDER BY ... LIMIT n` クエリで遅延マテリアライゼーションを使用するための新しい設定。"}]}]} />

オブジェクトストレージから Parquet ファイル (Iceberg テーブルを含む) を読み取る際に、遅延マテリアライゼーションの最適化を使用します。`ORDER BY ... LIMIT n` クエリでは、ソートやフィルタリングに不要なカラムは、`LIMIT` の結果として残った `n` 行についてのみ読み取られます。`query_plan_optimize_lazy_materialization` が有効な場合にのみ有効です。

<div id="query_plan_optimize_prewhere">
  ## query\_plan\_optimize\_prewhere
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.2"},{"label": "1"},{"label": "サポートされているストレージで、フィルタをPREWHERE式にプッシュダウンできるようにします"}]}]} />

サポートされているストレージで、フィルタをPREWHERE式にプッシュダウンできるようにします

<div id="query_plan_push_down_limit">
  ## query\_plan\_push\_down\_limit
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

実行計画内で LIMIT をより下流へ移動するクエリプランレベルの最適化を切り替えます。
この設定は、[query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは、開発者がデバッグ目的でのみ使用すべき上級者向けの設定です。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_push_limit_by_into_sort">
  ## query\_plan\_push\_limit\_by\_into\_sort
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "1"},{"label": "LIMIT BY のカラムが ORDER BY のプレフィックスである場合に、ストリームごとの LIMIT BY をソートパイプラインに押し込み、最終マージを流れる行数を減らす新しい設定。"}]}]} />

`ORDER BY ... LIMIT BY` クエリに対する クエリプランレベルの最適化 を切り替えます。`LIMIT BY` のカラムが `ORDER BY` 句のプレフィックスである場合、各並列ソート済みストリームは、ストリームが 1 つにマージされる前に `LIMIT BY` を適用します。これにより、最終マージおよび後続のパイプライン段階で処理される行数が減少します。`LIMIT BY` によって大量の行が破棄されるクエリを高速化します。

この設定は、[query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_read_in_order">
  ## query\_plan\_read\_in\_order
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

read in-order 最適化のクエリプランレベルでの 最適化 を切り替えます。
設定 [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これはエキスパート向けの設定であり、開発者がデバッグ目的でのみ使用すべきです。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_read_in_order_through_join">
  ## query\_plan\_read\_in\_order\_through\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "新しい設定"}]}]} />

JOIN演算において左テーブルから順序どおりに読み取りを継続し、その後のステップで利用できるようにします。

<div id="query_plan_read_in_order_through_spilling_join">
  ## query\_plan\_read\_in\_order\_through\_spilling\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "結合をメモリに固定して、結合が保証する順序を維持することで、自動スピルしきい値が設定されたハッシュ結合を介した順序どおりの読み取りの伝播を可能にする新しい設定。previous_value=false のため、26.8 より前のバージョンとの `互換性設定` では、このような結合を順序どおりの読み取りに使用せず、常にスピル可能とする従来の保守的な動作が復元されます。"}]}]} />

[`query_plan_read_in_order_through_join`](/ja/reference/settings/session-settings/query-plan#query_plan_read_in_order_through_join) を、[`max_bytes_before_external_join`](/ja/reference/settings/session-settings/max-bytes#max_bytes_before_external_join) または [`max_bytes_ratio_before_external_join`](/ja/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_join) で自動ディスクスピルしきい値が設定されたハッシュ結合にも適用できるようにします。

このような結合が左テーブルの順序を保持すると保証できるのは、一度もスピルしない場合に限られます。スピルすると、行がハッシュによってバケットに分散されるためです。この最適化が適用される場合、結合はメモリ内に保持され、スピルしきい値はトリガーされなくなります。代わりに、自動スピルが設定されていない場合と同様に、右側のテーブルはメモリトラッカーによって制限されます。

`0` に設定すると、スピルする可能性がある結合を介して順序どおりの読み取りを伝播しないという保守的な動作を維持します。メモリ制限内に収めるためにスピルに依存しており、そうでなければこの最適化の対象となるクエリは、従来どおり動作します。

結合の保持側に `Sort` と `Limit` をプッシュダウンする、`JOIN` を介した個別の `ORDER BY ... LIMIT` 最適化は、結合が順序を保持することに依存しないため、この設定にかかわらずスピル可能な結合でも引き続き利用できます。ただし、順序どおりの読み取りが可能な場合は、順序どおりの読み取りが優先されます。そのため、この設定を有効にすると、保持側が要求された順序で行をストリーミングできるスピル可能な結合に対する `ORDER BY ... LIMIT` では、プッシュダウンされた `Sort` と `Limit` ではなく、順序どおりの読み取りプランが使用されます。この切り替えには従来からの条件が適用され、特に [`query_plan_join_swap_table`](/ja/reference/settings/session-settings/query-plan#query_plan_join_swap_table) が明示的に `false` に設定されている必要があります。デフォルトの `auto` では、後続の最適化によって結合の左右が入れ替わり、順序どおりの読み取りプランが無効になる可能性があるため、この切り替えは確定せず、そのようなクエリではプッシュダウンされた `Sort` と `Limit` が引き続き使用されます。

<div id="query_plan_remove_redundant_distinct">
  ## query\_plan\_remove\_redundant\_distinct
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.2"},{"label": "1"},{"label": "クエリプランから冗長な Distinct ステップを削除"}]}]} />

冗長な DISTINCT ステップを削除するクエリプランレベルの最適化の有効/無効を切り替えます。
設定 [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは、開発者がデバッグ目的でのみ使用すべき上級者向けの設定です。この設定は、将来後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効化
* 1 - 有効化

<div id="query_plan_remove_redundant_sorting">
  ## query\_plan\_remove\_redundant\_sorting
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.1"},{"label": "1"},{"label": "クエリプラン内の冗長なソートを削除します。たとえば、サブクエリ内の ORDER BY 句に関連するソートステップなどです"}]}]} />

冗長なソートステップを削除するクエリプランレベルの最適化を切り替えます。たとえば、サブクエリ内のソートが対象です。
設定 [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これはエキスパート向けの設定であり、開発者がデバッグ目的でのみ使用してください。今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_remove_unused_columns">
  ## query\_plan\_remove\_unused\_columns
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "新しい設定。クエリプラン内の未使用カラムを削除する最適化を追加。"}]}]} />

この設定は、クエリプランステップから未使用のカラム (入力カラムと出力カラムの両方) を削除しようとするクエリプランレベルの最適化を有効または無効にします。
[query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これはエキスパートレベルの設定であり、開発者がデバッグ目的でのみ使用してください。この設定は将来、後方互換性のない形で変更されるか、削除される可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_reuse_storage_ordering_for_window_functions">
  ## query\_plan\_reuse\_storage\_ordering\_for\_window\_functions
</div>

**別名**: `optimize_read_in_window_order`

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.1"},{"label": "0"},{"label": "このロジックはデフォルトで無効です。"}]}]} />

ウィンドウ関数のソート時にストレージのソート順を利用する、クエリプランレベルの最適化をトグルします。
設定 [`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これは上級者向けの設定であり、開発者がデバッグ目的でのみ使用してください。この設定は将来、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_short_circuit_constant_false_join">
  ## query\_plan\_short\_circuit\_constant\_false\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "ON 条件が定数 false となる JOIN を短絡評価し、結果に寄与しない側を読み取らないための新しい設定。previous_value=false のため、26.8 より前のバージョンとの `互換性設定` では従来の動作（短絡評価なし）が復元されます。"}]}]} />

`ON` 条件が定数 false に畳み込まれる `JOIN` を短絡評価します。行を生成できない各入力側 (`INNER`/`CROSS`/`SEMI` では両側、`LEFT`/`RIGHT` では保持されない側) を空のソースに置き換えることで、結果に寄与しない側を読み取りません。アナライザ (`enable_analyzer = 1`) および非分散プランに適用されます。

<div id="query_plan_split_filter">
  ## query\_plan\_split\_filter
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<Note>
  これはエキスパート向けの設定であり、開発者がデバッグ目的でのみ使用してください。この設定は今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

フィルターを式に分割する、クエリプランレベルの最適化を切り替えます。
設定 [query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_text_index_add_hint">
  ## query\_plan\_text\_index\_add\_hint
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "1"},{"label": "新しい設定"}]}]} />

クエリプランで、転置テキスト索引から構築されるフィルタリングに対するヒント (追加の述語) を追加できるようにします。

<div id="query_plan_top_k_through_join">
  ## query\_plan\_top\_k\_through\_join
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "ソートキーが保持される側のみを参照している場合に、`ORDER BY ... LIMIT n` を LEFT\/RIGHT join をまたいでプッシュダウンするクエリプランレベルの最適化を有効にする新しい設定。"}]}]} />

ソートキーが join で保持される側 (LEFT/RIGHT) のカラムのみを参照している場合に、`ORDER BY ... LIMIT n` を join をまたいでプッシュダウンするクエリプランレベルの最適化を切り替えます。これにより、join 前に保持側の入力で生成される行数が制限されます。
設定 [query\_plan\_enable\_optimizations](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

設定可能な値:

* 0 - 無効
* 1 - 有効

<div id="query_plan_try_use_vector_search">
  ## query\_plan\_try\_use\_vector\_search
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.1"},{"label": "1"},{"label": "新しい設定"}]}]} />

ベクトル類似度索引の使用を試みるクエリプランレベルの最適化を切り替えます。
この設定は、[`query_plan_enable_optimizations`](/ja/reference/settings/session-settings/query-plan#query_plan_enable_optimizations) が 1 の場合にのみ有効です。

<Note>
  これはエキスパート向けの設定であり、開発者がデバッグ目的でのみ使用することを想定しています。この設定は今後、後方互換性のない形で変更されたり、削除されたりする可能性があります。
</Note>

設定可能な値:

* 0 - 無効
* 1 - 有効
