optimize_trivial_approximate_count_query
Use an approximate value for trivial count optimization of storages that support such estimation, for example, EmbeddedRocksDB. Possible values:- 0 — Optimization disabled.
- 1 — Optimization enabled.
optimize_trivial_count_query
Enables or disables the optimization to trivial querySELECT count() FROM table using metadata from MergeTree. If you need to use row-level security, disable this setting.
Possible values:
- 0 — Optimization disabled.
- 1 — Optimization enabled.
optimize_trivial_count_with_sparsity_filter
Extends the optimize_trivial_count_query optimization to queries of the formSELECT count() FROM t WHERE col <op> const, where <op> const
exactly partitions rows into defaults and non-defaults of col. The count is then
served from the per-column num_defaults / num_rows counters that MergeTree already
keeps in serialization.json, with no data scan.
Patterns recognised:
col = default(col)/col != default(col)forInt*/UInt*,String/FixedString,Date/DateTime/DateTime64,Decimal*,UUID,IPv4/IPv6.IS NULL/IS NOT NULLonNullablecolumns.empty(col)/notEmpty(col)onStringcolumns.col = true/col != trueonBoolcolumns.col > 0,col >= 1,col < 1,col <= 0on unsigned integer columns.- Bare
col/NOT colonInt*,UInt*,Boolcolumns (truthy test).
Float*, Enum*, Nullable, LowCardinality,
or composite types (Tuple, Array, Map, …) — for these the count is served from the
regular scan path.
To take effect, the per-part num_defaults counter must be exact. Enable the MergeTree
table setting compute_exact_num_defaults_for_sparse_columns on the target table before
inserts and merges. Parts written without it are silently opted out of the rewrite, so
enabling optimize_trivial_count_with_sparsity_filter alone is not enough.
For the IS NULL / IS NOT NULL patterns on Nullable columns, the column must also
have a num_defaults entry in serialization.json, which only happens when the MergeTree
table setting nullable_serialization_version is set to allow_sparse at insert /
merge time. With the default value basic Nullable columns get no per-column entry, so
the optimization silently does not apply.
Possible values:
- 0 — Optimization disabled.
- 1 — Optimization enabled.
optimize_trivial_group_by_limit_query
Enables or disables the optimization of a trivial querySELECT key_expr FROM table GROUP BY key_expr LIMIT n (with no aggregate functions in the projection, no HAVING/ORDER BY/LIMIT BY/window clauses, and no GROUP BY modifiers) by setting max_rows_to_group_by = n + offset with group_by_overflow_mode = 'any'. The aggregation stops once n + offset distinct keys are produced.
The optimization is suppressed when the user has explicitly set group_by_overflow_mode to a non-any value (to preserve their explicit throw/break contract), and when the user has already set a tighter max_rows_to_group_by (the optimization would be a no-op).
Possible values:
- 0 — Optimization disabled.
- 1 — Optimization enabled.