Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

optimize_trivial_* セッション設定

これらの設定は system.settings で参照でき、ソースコード から自動生成されています。

optimize_trivial_approximate_count_query

Bool
デフォルト値
0

このような概算をサポートするストレージ (たとえば EmbeddedRocksDB) に対する単純な count 最適化では、概算値を使用します。

設定可能な値:

  • 0 — 最適化は無効です。
    • 1 — 最適化は有効です。

optimize_trivial_count_query

Bool
デフォルト値
1

MergeTree のメタデータを使用して、単純なクエリ SELECT count() FROM table の最適化を有効または無効にします。行レベルのセキュリティを使用する必要がある場合は、この設定を無効にしてください。

設定可能な値:

  • 0 — 最適化は無効です。
    • 1 — 最適化は有効です。

関連項目:

optimize_trivial_count_with_sparsity_filter

ベータ機能
Bool
デフォルト値
1
バージョン履歴
バージョンデフォルト値コメント
26.81ベータに昇格し、デフォルトで有効化: `<pred>` によって行がデフォルト値と非デフォルト値に分かれる場合に、永続化されたカラムごとの `num_defaults` / `num_rows` カウンターを使って `SELECT count() FROM t WHERE <pred>` を返します。MergeTree 設定 `compute_exact_num_defaults_for_sparse_columns` が必要です(これも現在はデフォルトで有効です)。
26.70`<pred>` によって行がデフォルト値と非デフォルト値に正確に分かれる場合に、`serialization.json` に記録されたカラムごとの `num_defaults` / `num_rows` を使って `SELECT count() FROM t WHERE <pred>` を返すための新しい(実験的な)設定。

optimize_trivial_count_query の最適化を、 SELECT count() FROM t WHERE col <op> const 形式の クエリにも拡張します。ここで、<op> constcol のデフォルト値と非デフォルト値に行を 正確に分ける必要があります。その場合、count は MergeTree がすでに serialization.json に保持しているカラムごとの num_defaults / num_rows カウンターから 返されるため、データスキャンは発生しません。

認識されるパターン:

  • Int* / UInt*String / FixedStringDate / DateTime / DateTime64Decimal*UUIDIPv4 / IPv6 に対する col = default(col) / col != default(col)
  • Nullable カラムに対する IS NULL / IS NOT NULL
  • String カラムに対する empty(col) / notEmpty(col)
  • Bool カラムに対する col = true / col != true
  • 符号なし整数カラムに対する col > 0col >= 1col < 1col <= 0
  • Int*UInt*Bool カラムに対する単独の col / NOT col (真偽判定) 。

等価比較のパターンは、Float*Enum*NullableLowCardinality、 および複合型 (TupleArrayMap、…) には適用されません。これらでは、count は 通常のスキャン経路で処理されます。

この最適化を有効にするには、パーツごとの num_defaults カウンターが正確である必要があります。insert と merge の前に、ターゲットテーブルで MergeTree の テーブル設定 compute_exact_num_defaults_for_sparse_columns を有効にしてください。 これを有効にせずに書き込まれたパーツは、暗黙的に rewrite の対象外となるため、 optimize_trivial_count_with_sparsity_filter を有効にするだけでは不十分です。

Nullable カラムに対する IS NULL / IS NOT NULL パターンでは、そのカラムに serialization.json 内の num_defaults エントリも必要です。これは、MergeTree の テーブル設定 nullable_serialization_version が insert / merge 時に allow_sparse に設定されている場合にのみ作成されます。デフォルト値 basic では、Nullable カラムにはカラムごとのエントリが作成されないため、 この最適化は暗黙的に適用されません。

設定可能な値:

  • 0 — 最適化は無効です。
    • 1 — 最適化は有効です。

関連項目:

optimize_trivial_group_by_limit_query

Bool
デフォルト値
1
バージョン履歴
バージョンデフォルト値コメント
26.51クエリ `SELECT key_expr FROM t GROUP BY key_expr LIMIT n` に対して、集約を最大でも LIMIT 個の異なるキーに制限する新しい設定。

単純なクエリ SELECT key_expr FROM table GROUP BY key_expr LIMIT n に対する最適化を有効または無効にします (projection に aggregate functions、ウィンドウ関数、または arrayJoin がなく、HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/window clauses がなく、GROUP BY modifiers もない場合) 。この最適化は、max_rows_to_group_by = n + offset および group_by_overflow_mode = 'any' を設定することで行われます。n + offset 個の異なるキーが生成された時点で、集約は停止します。

この最適化は、ユーザーが group_by_overflow_modeany 以外の値に明示的に設定している場合 (明示した throw/break の動作を維持するため) 、およびユーザーがすでにより厳しい max_rows_to_group_by を設定している場合 (この最適化が no-op になるため) には抑制されます。

設定可能な値:

  • 0 — 最適化は無効です。
  • 1 — 最適化は有効です。

optimize_trivial_insert_select

Bool
デフォルト値
0
バージョン履歴
バージョンデフォルト値コメント
24.70この最適化は、多くの場合意味がありません。

単純な 'INSERT INTO table SELECT … FROM TABLES' クエリを最適化

optimize_trivial_view_pushdown_to_distributed

Bool
デフォルト値
1
バージョン履歴
バージョンデフォルト値コメント
26.81分散テーブル上の単純なビューについて、外側のクエリ全体を分片にプッシュする新しい設定。

有効にすると、SELECT リストがカラム参照、*、 または式のみで構成され (ウィンドウ関数やスカラーサブクエリは含まない) 、集約、グループ化、順序付け、結合を含まない Distributed テーブル上のビューでは、外側のクエリ全体が各分片にプッシュされます。これにより、各分片でビューのフィルターと式をローカルに適用できるため、ネットワーク経由で転送されるデータ量を削減できます。

設定可能な値:

  • 0 — 最適化は無効です。Distributed テーブル上のビューは常にコーディネーターで実行されます。
  • 1 — 最適化は有効です。
Navigation