Estos SETTINGS están disponibles en system.settings y se generan automáticamente a partir del código fuente.
optimize_trivial_approximate_count_query
Usa un valor aproximado para la optimización de recuento trivial en motores de almacenamiento que admitan este tipo de estimación, por ejemplo, EmbeddedRocksDB.
Valores posibles:
- 0 — Optimización deshabilitada.
- 1 — Optimización habilitada.
optimize_trivial_count_query
Activa o desactiva la optimización de la consulta trivial 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.
Véase también:
optimize_trivial_count_with_sparsity_filter
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.8 | 1 | Pasa a BETA y se habilita de forma predeterminada: resuelve `SELECT count() FROM t WHERE <pred>` a partir de los contadores persistentes `num_defaults` / `num_rows` por columna cuando `<pred>` divide las filas entre valores predeterminados y no predeterminados. Requiere la SETTING de MergeTree `compute_exact_num_defaults_for_sparse_columns` (que ahora también está habilitada de forma predeterminada). |
| 26.7 | 0 | Nuevo SETTING (experimental) para resolver `SELECT count() FROM t WHERE <pred>` a partir de `num_defaults` / `num_rows` por columna registrados en `serialization.json` cuando `<pred>` divide las filas entre valores predeterminados y no predeterminados. |
Extiende la optimización optimize_trivial_count_query a
consultas de la forma 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).
Los patrones de igualdad no se aplican a 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.
Véase también:
optimize_trivial_group_by_limit_query
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.5 | 1 | Nuevo SETTING que limita la agregación a un máximo de LIMIT claves distintas para las consultas `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`. |
Activa o desactiva la optimización de una consulta trivial SELECT key_expr FROM table GROUP BY key_expr LIMIT n (sin funciones de agregación, funciones de ventana ni arrayJoin en la proyección, sin cláusulas HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/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 deshabilitada.
- 1 — Optimización habilitada.
optimize_trivial_insert_select
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 24.7 | 0 | La optimización no tiene sentido en muchos casos. |
Optimiza la consulta trivial 'INSERT INTO table SELECT … FROM TABLES'
optimize_trivial_view_pushdown_to_distributed
Historial de versiones
| Versión | Valor predeterminado | Comentario |
|---|---|---|
| 26.8 | 1 | Nueva SETTING para enviar la consulta externa completa a los segmentos en vistas triviales sobre tablas Distributed. |
Cuando está habilitada, en las vistas sobre tablas Distributed cuya lista SELECT contiene únicamente referencias a columnas, *
o expresiones (pero sin funciones de ventana ni subconsultas escalares), y que no incluyen agregación, agrupación, ordenación ni joins, la consulta externa completa se envía a
cada segmento. Esto permite que el segmento aplique localmente los filtros y las expresiones de la vista, lo que reduce la cantidad de datos transferidos por la red.
Valores posibles:
- 0 — La optimización está deshabilitada; las vistas sobre tablas
Distributedsiempre se ejecutan en el coordinador. - 1 — La optimización está habilitada.