> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SETTINGS de sesión optimize_trivial_*

> SETTINGS de sesión de ClickHouse del grupo generado optimize_trivial_*.

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Tipo</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Predeterminado</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Modificable sin reiniciar
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Funcionalidad experimental. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">Más información.</a></u>
        </div>;
};

Estos SETTINGS están disponibles en [system.settings](/docs/es/reference/system-tables/settings) y se generan automáticamente a partir del [código fuente](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="optimize_trivial_approximate_count_query">
  ## optimize\_trivial\_approximate\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

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.

<div id="optimize_trivial_count_query">
  ## optimize\_trivial\_count\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

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\_functions\_to\_subcolumns](/docs/es/reference/settings/session-settings/optimize#optimize_functions_to_subcolumns)

<div id="optimize_trivial_count_with_sparsity_filter">
  ## optimize\_trivial\_count\_with\_sparsity\_filter
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0"},{"label": "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](/docs/es/reference/settings/session-settings/optimize-trivial#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)` para `Int*` / `UInt*`, `String` /
  `FixedString`, `Date` / `DateTime` / `DateTime64`, `Decimal*`, `UUID`, `IPv4` / `IPv6`.
* `IS NULL` / `IS NOT NULL` en columnas `Nullable`.
* `empty(col)` / `notEmpty(col)` en columnas `String`.
* `col = true` / `col != true` en columnas `Bool`.
* `col > 0`, `col >= 1`, `col < 1`, `col <= 0` en columnas enteras sin signo.
* `col` / `NOT col` directos en columnas `Int*`, `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\_count\_query](/docs/es/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query)

<div id="optimize_trivial_group_by_limit_query">
  ## optimize\_trivial\_group\_by\_limit\_query
</div>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1"},{"label": "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 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.

<div id="optimize_trivial_insert_select">
  ## optimize\_trivial\_insert\_select
</div>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "24.7"},{"label": "0"},{"label": "La optimización no tiene sentido en muchos casos."}]}]} />

Optimiza la consulta trivial 'INSERT INTO table SELECT ... FROM TABLES'
