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

optimize_aggregators_of_group_by_keys

SELECT 句の GROUP BY キーに対する min/max/any/anyLast 集約関数を削除します

optimize_append_index

索引条件を追加するには、制約を使用します。デフォルトは false です。 設定可能な値:
  • true, false

optimize_arithmetic_operations_in_aggregate_functions

算術演算を集計関数の外に移動する

optimize_const_name_size

大きな定数はスカラーに置き換え、名前にはハッシュを使用します (サイズは名前の長さで推定されます) 。 設定可能な値:
  • 正の整数 - 名前の最大長
  • 0 — 常に置き換える
  • 負の整数 - 置き換えない

optimize_count_from_files

さまざまな入力フォーマットのファイルから行数をカウントする際の最適化を有効または無効にします。テーブル関数/エンジン file/s3/url/hdfs/azureBlobStorage に適用されます。 設定可能な値:
  • 0 — 最適化は無効です。
  • 1 — 最適化は有効です。

optimize_dictget_tuple_element

不要な Dictionary 属性の取得を避けるため、tupleElement(dictGet('dict', ('a', 'b', 'c'), key), 2) は dictGet('dict', 'b', key) に書き換えられます。位置指定アクセス (.1、.2、…) と名前付きアクセス (.b) に対応しており、デフォルト引数が定数 Tuple または定数のみからなる tuple(...) の場合は dictGetOrDefault にも適用されます。

optimize_distinct_in_order

DISTINCT 内の一部のカラムがソート順のプレフィックスになっている場合、DISTINCT の最適化を有効にします。たとえば、MergeTree におけるソートキーのプレフィックスや、ORDER BY ステートメントのプレフィックスです。

optimize_distributed_group_by_sharding_key

イニシエーターサーバーでのコストの高い集約を回避することで、GROUP BY sharding_key クエリを最適化します (これにより、イニシエーターサーバー上でそのクエリが使用するメモリ量も削減されます) 。 次の種類のクエリがサポートされています (およびそれらのすべての組み合わせ) :
  • SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist
  • SELECT ... FROM dist GROUP BY sharding_key[, ...]
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
次の種類のクエリはサポートされていません (このうち一部は今後サポートされる可能性があります) :
  • SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
  • SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
  • SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
  • SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
設定可能な値:
  • 0 — 無効。
  • 1 — 有効。
関連項目:
現時点では optimize_skip_unused_shards が必要です。これは、将来的にこの設定がデフォルトで有効になる可能性がある一方で、データが Distributed テーブル経由で挿入され、すなわち sharding_key に従って分散されている場合にのみ正しく動作するためです。

optimize_dry_run_check_part

有効な場合、OPTIMIZE ... DRY RUN は checkDataPart を使って、マージ後の結果パートを検証します。チェックに失敗すると、例外がスローされます。

optimize_empty_string_comparisons

col = ” や ” = col のような式を empty(col) に、col != ” や ” != col を notEmpty(col) に変換します。 ただし、col が String または FixedString 型の場合に限ります。

optimize_extract_common_expressions

WHERE、PREWHERE、ON、HAVING、QUALIFY の式で、論理和から共通式を抽出できるようにします。(A AND B) OR (A AND C) のような論理式は A AND (B OR C) に書き換えられ、これにより次の最適化を活用しやすくなる場合があります。
  • 単純なフィルタ式でのインデックス利用
  • CROSS JOIN から INNER JOIN への最適化

optimize_functions_to_subcolumns

一部の関数をサブカラムの読み取りに置き換える最適化を有効または無効にします。これにより、読み取るデータ量を削減できます。 変換可能な関数は次のとおりです。
  • length を size0 サブカラムの読み取りに変換します。
  • empty を size0 サブカラムの読み取りに変換します。
  • notEmpty を size0 サブカラムの読み取りに変換します。
  • isNull を null サブカラムの読み取りに変換します。
  • isNotNull を null サブカラムの読み取りに変換します。
  • count を null サブカラムの読み取りに変換します。
  • mapKeys を keys サブカラムの読み取りに変換します。
  • mapValues を values サブカラムの読み取りに変換します。
  • Map に対する has および notHas を keys サブカラムの読み取りに変換します。
  • mapContainsKeyLike を keys サブカラムの読み取りに変換します。
  • mapContainsValueLike を values サブカラムの読み取りに変換します。
設定可能な値:
  • 0 — 最適化は無効です。
  • 1 — 最適化は有効です。

optimize_inverse_dictionary_lookup

事前に計算した可能なキー値の集合に対して高速にルックアップすることで、Dictionary の逆引きに対する繰り返しのルックアップを回避します。

optimize_multiif_to_if

‘multiIf’ の条件が 1 つだけの場合、‘if’ に置き換えます。

optimize_mutations_with_partition_pruning

有効にすると、ClickHouse は ReplicatedMergeTree ファミリーのテーブルに対する ALTER TABLE UPDATE/DELETE mutation および論理更新 UPDATE/DELETE ステートメントの WHERE 句からパーティションキーの条件を自動的に検出し、すべてのパーティションではなく影響を受けるパーティションのみを処理します。 この自動的な pruning は、現時点ではレプリケートテーブルにのみ適用されます。レプリケーションを使用しない MergeTree テーブルでは、明示的に IN PARTITION 句を指定して、mutation の対象を特定のパーティションに限定してください。 設定可能な値:
  • 0 — 無効。mutation と論理更新はすべてのパーティションを処理します。
  • 1 — 有効。mutation と論理更新は WHERE 条件に一致するパーティションのみを処理します。

optimize_normalize_count_variants

意味上 count() と等価な集約関数を count() に書き換えます。

optimize_on_insert

挿入前にデータ変換を有効または無効にします。これは、この block に対して (table engine に応じて) マージ が実行された場合と同様の処理です。 設定可能な値:
  • 0 — 無効。
  • 1 — 有効。
例 有効な場合と無効な場合の違い: クエリ:
結果:
この設定は、materialized view の動作にも影響する点に注意してください。

optimize_prewhere_after_pushdown

後続のクエリプラン最適化によって MergeTree の読み取りステップの上に追加のフィルター (たとえば JOIN を介した述語プッシュダウンやプロジェクションの書き換え) が 追加されることがあります。この設定を有効にすると、その後に 2 回目の PREWHERE 昇格パスを実行します。既存の PREWHERE がすでにある場合、新しいフィルターは個別のフィルターステップとして残されず、 AND でそこにマージされます。

optimize_qbit_distance_function_reads

QBit データ型に対する距離関数を、ストレージから計算に必要なカラムだけを読み込む等価な関数に置き換えます。

optimize_read_in_order

MergeTree テーブルのデータ読み取り時に、SELECT クエリでの ORDER BY 最適化を有効にします。 設定可能な値:
  • 0 — ORDER BY 最適化は無効です。
  • 1 — ORDER BY 最適化は有効です。
関連項目

optimize_read_in_reverse_order_final

ReplacingMergeTree テーブルから FINAL 修飾子を指定した SELECT クエリで、ソートキーの逆順にデータを読み取れるようにします。optimize_read_in_order も有効な場合にのみ有効になります。 設定可能な値:
  • 0 — FINAL 指定時の逆順読み取りは無効です。
  • 1 — FINAL 指定時の逆順読み取りは有効です。

optimize_respect_aliases

true に設定すると、WHERE/GROUP BY/ORDER BY で別名が考慮されるようになり、パーティションプルーニング、セカンダリ索引、optimize_aggregation_in_order、optimize_read_in_order、optimize_trivial_count に役立ちます

optimize_sorting_by_input_stream_properties

入力ストリームのソート特性に基づいてソートを最適化します

optimize_substitute_columns

カラムの置換には制約を使用します。既定値はfalseです。 設定可能な値:
  • true, false

optimize_syntax_fuse_functions

同一の引数を持つ集約関数を統合するかどうかを有効にします。sum、count、または avg のうち、同一の引数を持つ集約関数が少なくとも 2 つ含まれるクエリを、sumCount を使用する形に書き換えます。 設定可能な値:
  • 0 — 同一の引数を持つ関数は統合されません。
  • 1 — 同一の引数を持つ関数は統合されます。
例 クエリ:
結果:

optimize_throw_if_noop

OPTIMIZEクエリでマージが実行されなかった場合に、例外をスローするかどうかを有効または無効にします。 デフォルトでは、OPTIMIZE は何も実行しなかった場合でも成功として扱われます。この設定を使うと、こうした状況を区別し、その理由を例外メッセージで確認できます。 設定可能な値:
  • 1 — 例外のスローが有効です。
  • 0 — 例外のスローが無効です。

optimize_time_filter_with_preimage

関数を、変換を伴わない等価な比較式に書き換えることで、Date および DateTime の述語を最適化します (例: toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')

optimize_truncate_order_by_after_group_by_keys

ORDER BY のプレフィックスですべての GROUP BY キーがカバーされている場合、末尾の ORDER BY 要素を削除します。

optimize_uniq_to_count

サブクエリに DISTINCT または GROUP BY 句がある場合、uniq とその variants (uniqUpTo を除く) を count に書き換えます。

optimize_using_constraints

クエリ最適化のために制約を使用します。デフォルトはfalseです。 設定可能な値:
  • true, false
最終更新日 2026年9月26日