> ## 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.

# configurações de sessão optimize_trivial_*

> Configurações de sessão do ClickHouse no grupo gerado 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"
  }}>Padrão</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Pode ser alterado sem 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>
            Recurso experimental. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">Saiba mais.</a></u>
        </div>;
};

Essas configurações estão disponíveis em [system.settings](/docs/pt-BR/reference/system-tables/settings) e são autogeradas a partir do [código-fonte](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 um valor aproximado na otimização de contagem trivial para mecanismos de armazenamento que oferecem suporte a esse tipo de estimativa, como o EmbeddedRocksDB.

Valores possíveis:

* 0 — Otimização desabilitada.
  * 1 — Otimização habilitada.

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

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

Ativa ou desativa a otimização da consulta trivial `SELECT count() FROM table` usando metadados do MergeTree. Se você precisar usar segurança em nível de linha, desative esta configuração.

Valores possíveis:

* 0 — Otimização desativada.
  * 1 — Otimização ativada.

Veja também:

* [optimize\_functions\_to\_subcolumns](/docs/pt-BR/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": "Nova configuração (experimental) para responder a `SELECT count() FROM t WHERE <pred>` com base nos contadores `num_defaults` \/ `num_rows` por coluna registrados em `serialization.json` quando `<pred>` particiona as linhas em valores padrão e não padrão."}]}]} />

Estende a otimização [optimize\_trivial\_count\_query](/docs/pt-BR/reference/settings/session-settings/optimize-trivial#optimize_trivial_count_query) para
consultas na forma `SELECT count() FROM t WHERE col <op> const`, em que `<op> const`
particiona exatamente as linhas em valores padrão e não padrão de `col`. A contagem é então
obtida a partir dos contadores `num_defaults` / `num_rows` por coluna que o MergeTree já
mantém em `serialization.json`, sem varredura de dados.

Padrões reconhecidos:

* `col = default(col)` / `col != default(col)` para `Int*` / `UInt*`, `String` /
  `FixedString`, `Date` / `DateTime` / `DateTime64`, `Decimal*`, `UUID`, `IPv4` / `IPv6`.
* `IS NULL` / `IS NOT NULL` em colunas `Nullable`.
* `empty(col)` / `notEmpty(col)` em colunas `String`.
* `col = true` / `col != true` em colunas `Bool`.
* `col > 0`, `col >= 1`, `col < 1`, `col <= 0` em colunas de inteiros sem sinal.
* `col` isolada / `NOT col` em colunas `Int*`, `UInt*`, `Bool` (teste de veracidade).

Os padrões de igualdade não se aplicam a `Float*`, `Enum*`, `Nullable`, `LowCardinality`
nem a tipos compostos (`Tuple`, `Array`, `Map`, ...) — nesses casos, a contagem é obtida pelo
caminho normal de varredura.

Para entrar em vigor, o contador `num_defaults` por parte deve ser exato. Habilite a
configuração de tabela MergeTree `compute_exact_num_defaults_for_sparse_columns` na tabela de destino antes de
inserts e merges. Partes gravadas sem isso são silenciosamente excluídas da rewrite, portanto
habilitar apenas `optimize_trivial_count_with_sparsity_filter` não é suficiente.

Para os padrões `IS NULL` / `IS NOT NULL` em colunas `Nullable`, a coluna também deve
ter uma entrada `num_defaults` em `serialization.json`, o que só acontece quando a configuração de tabela MergeTree
`nullable_serialization_version` é definida como `allow_sparse` no momento do insert /
merge. Com o valor padrão `basic`, colunas `Nullable` não recebem entrada por coluna, portanto
a otimização silenciosamente não se aplica.

Valores possíveis:

* 0 — Otimização desabilitada.
  * 1 — Otimização habilitada.

Veja também:

* [optimize\_trivial\_count\_query](/docs/pt-BR/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": "Nova configuração que limita a agregação a, no máximo, LIMIT chaves distintas para consultas `SELECT key_expr FROM t GROUP BY key_expr LIMIT n`."}]}]} />

Habilita ou desabilita a otimização de uma consulta trivial `SELECT key_expr FROM table GROUP BY key_expr LIMIT n` (sem funções de agregação na projeção, sem cláusulas `HAVING`/`ORDER BY`/`LIMIT BY`/window e sem modificadores `GROUP BY`) definindo `max_rows_to_group_by = n + offset` com `group_by_overflow_mode = 'any'`. A agregação é interrompida assim que `n + offset` chaves distintas são geradas.

A otimização é suprimida quando o usuário definiu explicitamente `group_by_overflow_mode` para um valor diferente de `any` (para preservar a semântica explícita de `throw`/`break`) e quando o usuário já definiu um `max_rows_to_group_by` mais restritivo (a otimização seria um no-op).

Possíveis valores:

* 0 — Otimização desabilitada.
* 1 — Otimização 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": "A otimização não faz sentido em muitos casos."}]}]} />

Otimizar a consulta trivial 'INSERT INTO table SELECT ... FROM TABLES'
