> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/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 BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Beta</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Funcionalidad beta</span>
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versión", "Valor predeterminado", "Comentario"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        Historial de versiones
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

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>;
};

Estos SETTINGS están disponibles en [system.settings](/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](/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>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "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)."}]}, {"id": "row-2","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](/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](/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, 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.

<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'

<div id="optimize_trivial_view_pushdown_to_distributed">
  ## optimize\_trivial\_view\_pushdown\_to\_distributed
</div>

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "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](/es/reference/engines/table-engines/special/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 `Distributed` siempre se ejecutan en el coordinador.
* 1 — La optimización está habilitada.
