optimize_trivial_approximate_count_query
- 0 — 最適化は無効です。
- 1 — 最適化は有効です。
optimize_trivial_count_query
SELECT count() FROM table の最適化を有効または無効にします。行レベルのセキュリティを使用する必要がある場合は、この設定を無効にしてください。
設定可能な値:
- 0 — 最適化は無効です。
- 1 — 最適化は有効です。
optimize_trivial_count_with_sparsity_filter
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 key_expr FROM table GROUP BY key_expr LIMIT n に対する最適化を有効または無効にします (projection に aggregate functions がなく、HAVING/ORDER BY/LIMIT BY/window clauses がなく、GROUP BY modifiers もない場合) 。この最適化は、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 を設定している場合 (この最適化が no-op になるため) には抑制されます。
設定可能な値:
- 0 — 最適化は無効です。
- 1 — 最適化は有効です。