これらの設定は 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
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 25.11 | 256 | 大きな定数はスカラーに置き換え、名前にはハッシュを使用します(サイズは名前の長さで推定されます) |
大きな定数はスカラーに置き換え、名前にはハッシュを使用します (サイズは名前の長さで推定されます) 。
設定可能な値:
- 正の整数 - 名前の最大長
- 0 — 常に置き換える
- 負の整数 - 置き換えない
optimize_count_from_files
さまざまな入力フォーマットのファイルから行数をカウントする際の最適化を有効または無効にします。テーブル関数/エンジン file/s3/url/hdfs/azureBlobStorage に適用されます。
設定可能な値:
- 0 — 最適化は無効です。
- 1 — 最適化は有効です。
optimize_dictget_tuple_element
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 26.5 | 1 | tupleElement(dictGet(..., tuple_of_attrs, ...), N) を単一属性の dictGet 呼び出しに書き換えます。 |
不要な 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 distSELECT ... FROM dist GROUP BY sharding_key[, ...]SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY xSELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x
次の種類のクエリはサポートされていません (このうち一部は今後サポートされる可能性があります) :
SELECT ... GROUP BY sharding_key[, ...] WITH TOTALSSELECT ... GROUP BY sharding_key[, ...] WITH ROLLUPSELECT ... GROUP BY sharding_key[, ...] WITH CUBESELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1
設定可能な値:
- 0 — 無効。
- 1 — 有効。
関連項目:
optimize_dry_run_check_part
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 26.2 | 1 | 新しい設定 |
有効な場合、OPTIMIZE ... DRY RUN は checkDataPart を使って、マージ後の結果パートを検証します。チェックに失敗すると、例外がスローされます。
optimize_empty_string_comparisons
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 25.10 | 1 | 新しい設定 |
col = '' や '' = col のような式を empty(col) に、col != '' や '' != col を notEmpty(col) に変換します。 ただし、col が String または FixedString 型の場合に限ります。
optimize_extract_common_expressions
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 25.1 | 1 | 論理積の論理和から共通式を抽出することで、WHERE、PREWHERE、ON、HAVING、QUALIFY の式を最適化します。 |
| 24.12 | 0 | 論理積の論理和から共通式を抽出して WHERE、PREWHERE、ON、HAVING、QUALIFY の式を最適化する設定を導入しました。 |
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
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 24.8 | 1 | デフォルトで有効 |
一部の関数をサブカラムの読み取りに置き換える最適化を有効または無効にします。これにより、読み取るデータ量を削減できます。
変換可能な関数は次のとおりです。
- length を size0 サブカラムの読み取りに変換します。
- empty を size0 サブカラムの読み取りに変換します。
- notEmpty を size0 サブカラムの読み取りに変換します。
- isNull を null サブカラムの読み取りに変換します。
- isNotNull を null サブカラムの読み取りに変換します。
- count を null サブカラムの読み取りに変換します。
- mapKeys を keys サブカラムの読み取りに変換します。
- mapValues を values サブカラムの読み取りに変換します。
設定可能な値:
- 0 — 最適化は無効です。
- 1 — 最適化は有効です。
optimize_inverse_dictionary_lookup
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 25.12 | 1 | 新しい設定 |
事前に計算した可能なキー値の集合に対して高速にルックアップすることで、Dictionary の逆引きに対する繰り返しのルックアップを回避します。
optimize_multiif_to_if
'multiIf' の条件が 1 つだけの場合、'if' に置き換えます。
optimize_normalize_count_variants
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 21.3 | 1 | 意味上 count() と等価な集約関数は、既定で count() に書き換えられます |
意味上 count() と等価な集約関数を count() に書き換えます。
optimize_on_insert
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 21.1 | 1 | ユーザー体験向上のため、デフォルトで INSERT 時のデータ最適化を有効にします |
挿入前にデータ変換を有効または無効にします。これは、この block に対して (table engine に応じて) マージ が実行された場合と同様の処理です。
設定可能な値:
- 0 — 無効。
- 1 — 有効。
例
有効な場合と無効な場合の違い:
クエリ:
SET optimize_on_insert = 1;
CREATE TABLE test1 (`FirstTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY FirstTable;
INSERT INTO test1 SELECT number % 2 FROM numbers(5);
SELECT * FROM test1;
SET optimize_on_insert = 0;
CREATE TABLE test2 (`SecondTable` UInt32) ENGINE = ReplacingMergeTree ORDER BY SecondTable;
INSERT INTO test2 SELECT number % 2 FROM numbers(5);
SELECT * FROM test2;結果:
┌─FirstTable─┐
│ 0 │
│ 1 │
└────────────┘
┌─SecondTable─┐
│ 0 │
│ 0 │
│ 0 │
│ 1 │
│ 1 │
└─────────────┘この設定は、materialized view の動作にも影響する点に注意してください。
optimize_prewhere_after_pushdown
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 26.6 | 0 | 後続の最適化(`JOIN` を介した述語プッシュダウンやプロジェクションの書き換え)によって `MergeTree` の読み取りステップの上に追加されたフィルターを、既存の PREWHERE チェーンにマージするための 2 回目の PREWHERE 昇格パスを有効にする新しい設定。 |
後続のクエリプラン最適化によって MergeTree の読み取りステップの上に追加のフィルター
(たとえば JOIN を介した述語プッシュダウンやプロジェクションの書き換え) が
追加されることがあります。この設定を有効にすると、その後に 2 回目の PREWHERE 昇格パスを実行します。既存の
PREWHERE がすでにある場合、新しいフィルターは個別のフィルターステップとして残されず、
AND でそこにマージされます。
optimize_qbit_distance_function_reads
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 25.10 | 1 | 新しい設定 |
QBit データ型に対する距離関数を、ストレージから計算に必要なカラムだけを読み込む等価な関数に置き換えます。
optimize_read_in_order
MergeTree テーブルのデータ読み取り時に、SELECT クエリでの ORDER BY 最適化を有効にします。
設定可能な値:
- 0 —
ORDER BY最適化は無効です。 - 1 —
ORDER BY最適化は有効です。
関連項目
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
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 26.3 | 1 | この最適化は本番環境に対応しています |
同一の引数を持つ集約関数を統合するかどうかを有効にします。sum、count、または avg のうち、同一の引数を持つ集約関数が少なくとも 2 つ含まれるクエリを、sumCount を使用する形に書き換えます。
設定可能な値:
- 0 — 同一の引数を持つ関数は統合されません。
- 1 — 同一の引数を持つ関数は統合されます。
例
クエリ:
CREATE TABLE fuse_tbl(a Int8, b Int8) Engine = Log;
SET optimize_syntax_fuse_functions = 1;
EXPLAIN SYNTAX run_query_tree_passes = 1 SELECT sum(a), sum(b), count(b), avg(b) from fuse_tbl FORMAT TSVRaw;結果:
SELECT
sum(__table1.a) AS `sum(a)`,
tupleElement(sumCount(__table1.b), 1) AS `sum(b)`,
tupleElement(sumCount(__table1.b), 2) AS `count(b)`,
divide(tupleElement(sumCount(__table1.b), 1), toFloat64(tupleElement(sumCount(__table1.b), 2))) AS `avg(b)`
FROM default.fuse_tbl AS __table1optimize_throw_if_noop
OPTIMIZEクエリでマージが実行されなかった場合に、例外をスローするかどうかを有効または無効にします。
デフォルトでは、OPTIMIZE は何も実行しなかった場合でも成功として扱われます。この設定を使うと、こうした状況を区別し、その理由を例外メッセージで確認できます。
設定可能な値:
- 1 — 例外のスローが有効です。
- 0 — 例外のスローが無効です。
optimize_time_filter_with_preimage
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 24.2 | 1 | 関数を、変換を伴わない等価な比較式に書き換えることで、Date および DateTime の述語を最適化します(例: toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31') |
関数を、変換を伴わない等価な比較式に書き換えることで、Date および DateTime の述語を最適化します (例: toYear(col) = 2023 -> col >= '2023-01-01' AND col <= '2023-12-31')
optimize_truncate_order_by_after_group_by_keys
バージョン履歴
| バージョン | デフォルト値 | コメント |
|---|---|---|
| 26.4 | 1 | ORDER BY のプレフィックスですべての GROUP BY キーがカバーされている場合、末尾の ORDER BY 要素を削除します。 |
ORDER BY のプレフィックスですべての GROUP BY キーがカバーされている場合、末尾の ORDER BY 要素を削除します。
optimize_uniq_to_count
サブクエリに DISTINCT または GROUP BY 句がある場合、uniq とその variants (uniqUpTo を除く) を count に書き換えます。
optimize_using_constraints
クエリ最適化のために制約を使用します。デフォルトはfalseです。
設定可能な値:
- true, false