optimize_trivial_approximate_count_query
- 0 — Optimización deshabilitada.
- 1 — Optimización habilitada.
optimize_trivial_count_query
SELECT count() FROM table mediante los metadatos de MergeTree. Si necesita usar seguridad a nivel de fila, desactive este SETTING.
Valores posibles:
- 0 — Optimización desactivada.
- 1 — Optimización activada.
optimize_trivial_count_with_sparsity_filter
SELECT count() FROM t WHERE col <op> const, donde <op> const
divide exactamente las filas entre valores predeterminados y no predeterminados de col. El conteo se
resuelve entonces a partir de los contadores num_defaults / num_rows por columna que MergeTree ya
mantiene en serialization.json, sin escanear datos.
Patrones reconocidos:
col = default(col)/col != default(col)paraInt*/UInt*,String/FixedString,Date/DateTime/DateTime64,Decimal*,UUID,IPv4/IPv6.IS NULL/IS NOT NULLen columnasNullable.empty(col)/notEmpty(col)en columnasString.col = true/col != trueen columnasBool.col > 0,col >= 1,col < 1,col <= 0en columnas enteras sin signo.col/NOT coldirectos en columnasInt*,UInt*,Bool(prueba de veracidad).
Float*, Enum*, Nullable, LowCardinality
ni a tipos compuestos (Tuple, Array, Map, …) — para estos, el conteo se resuelve mediante la
ruta de escaneo normal.
Para que surta efecto, el contador num_defaults por parte debe ser exacto. Habilite la
SETTING de tabla de MergeTree compute_exact_num_defaults_for_sparse_columns en la tabla de destino antes de
las inserciones y fusiones. Las partes escritas sin ella quedan excluidas silenciosamente de la reescritura, por lo que
habilitar solo optimize_trivial_count_with_sparsity_filter no es suficiente.
Para los patrones IS NULL / IS NOT NULL en columnas Nullable, la columna también debe
tener una entrada num_defaults en serialization.json, lo que solo ocurre cuando la SETTING de tabla de MergeTree
nullable_serialization_version está establecida en allow_sparse en el momento de la inserción /
fusión. Con el valor predeterminado basic, las columnas Nullable no obtienen ninguna entrada por columna, por lo que
la optimización simplemente no se aplica.
Posibles valores:
- 0 — Optimización deshabilitada.
- 1 — Optimización habilitada.
optimize_trivial_group_by_limit_query
SELECT key_expr FROM table GROUP BY key_expr LIMIT n (sin funciones de agregación en la proyección, sin cláusulas HAVING/ORDER BY/LIMIT BY/window y sin modificadores GROUP BY) estableciendo max_rows_to_group_by = n + offset con group_by_overflow_mode = 'any'. La agregación se detiene en cuanto se obtienen n + offset claves distintas.
La optimización se suprime cuando el usuario ha establecido explícitamente group_by_overflow_mode en un valor distinto de any (para preservar el comportamiento explícito de throw/break), y cuando el usuario ya ha establecido un max_rows_to_group_by más restrictivo (la optimización no tendría efecto).
Valores posibles:
- 0 — Optimización desactivada.
- 1 — Optimización activada.