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

optimize_trivial_approximate_count_query

このような概算をサポートするストレージ (たとえば EmbeddedRocksDB) に対する単純な count 最適化では、概算値を使用します。 設定可能な値:
  • 0 — 最適化は無効です。
    • 1 — 最適化は有効です。

optimize_trivial_count_query

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

optimize_trivial_count_with_sparsity_filter

optimize_trivial_count_query の最適化を、 SELECT count() FROM t WHERE col <op> const 形式の クエリにも拡張します。ここで、<op> const は col のデフォルト値と非デフォルト値に行を 正確に分ける必要があります。その場合、count は MergeTree がすでに serialization.json に保持しているカラムごとの num_defaults / num_rows カウンターから 返されるため、データスキャンは発生しません。 認識されるパターン:
  • Int* / UInt*、String / FixedString、Date / DateTime / DateTime64、Decimal*、UUID、IPv4 / IPv6 に対する col = default(col) / col != default(col)。
  • Nullable カラムに対する IS NULL / IS NOT NULL。
  • String カラムに対する empty(col) / notEmpty(col)。
  • Bool カラムに対する col = true / col != true。
  • 符号なし整数カラムに対する col > 0、col >= 1、col < 1、col <= 0。
  • Int*、UInt*、Bool カラムに対する単独の col / NOT col (真偽判定) 。
等価比較のパターンは、Float*、Enum*、Nullable、LowCardinality、 および複合型 (Tuple、Array、Map、…) には適用されません。これらでは、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

単純なクエリ SELECT ... FROM table GROUP BY key_expr LIMIT n (HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/ウィンドウ句を含まず、GROUP BY 修飾子も使用しないもの) に対し、集約を n + offset 個の異なるキーで打ち切る最適化を有効または無効にします。 射影に集約関数が含まれない場合、この上限は max_rows_to_group_by = n + offset と group_by_overflow_mode = 'any' を設定することで適用されます (この形式は分散クエリの各分片にも適用されます) 。射影に集約関数が含まれる場合、上限はサーバーが集約全体をローカルで実行する場合にのみ適用されます。いずれかの集約スレッドが上限を超えると、すべてのスレッドは保持対象となる n + offset 個のキーからなる単一の共有セットに制限されます。そのため、返されるキーの集約値は正確に保たれます。 この最適化は、次の場合には適用されません。ユーザーが group_by_overflow_mode を any 以外の値に明示的に設定している場合 (明示的に指定された throw/break の動作を維持するため) 、ユーザーがすでにより小さい max_rows_to_group_by を設定している場合、および exact_rows_before_limit が有効な場合 (上限により rows_before_limit_at_least が報告する値が最大でも n + offset になってしまうため) です。 集約関数を含む形式は、同じクエリにおいて enable_group_by_top_k_optimization による GROUP BY トップKヒープとは併用されません。ヒープの方が高速であるため、この打ち切りはヒープが適用されない場合にのみ使用されます。具体的には、ヒープが無効な場合、n + offset が query_plan_max_limit_for_top_k_optimization を超える場合、max_rows_to_group_by が設定されている場合、またはクエリプランがシリアル化される場合です。 設定可能な値:
  • 0 — 最適化は無効です。
  • 1 — 最適化は有効です。

optimize_trivial_insert_select

単純な ‘INSERT INTO table SELECT … FROM TABLES’ クエリを最適化 この設定を使用する場合は、max_insert_threads 設定もあわせて明示的に指定してください。この最適化によって SELECT の読み取りスレッド数が max_insert_threads に制限されるため、SELECT が生成するブロック数が変わります。

optimize_trivial_view_pushdown_to_distributed

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