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

# configurações de sessão optimize_trivial_*

> Configurações de sessão do ClickHouse no grupo gerado 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>Recurso beta</span>
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Versão", "Valor padrão", "Comentário"];
  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
  }}>
        Histórico de versões
      </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"
  }}>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>;
};

Essas configurações estão disponíveis em [system.settings](/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](/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>

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "Promovida para BETA e habilitada por padrão: responde a `SELECT count() FROM t WHERE <pred>` com base nos contadores persistidos `num_defaults` \/ `num_rows` por coluna quando `<pred>` particiona as linhas em valores padrão e não padrão. Requer a configuração MergeTree `compute_exact_num_defaults_for_sparse_columns` (agora também habilitada por padrão)."}]}, {"id": "row-2","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](/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](/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'

<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": "Nova configuração para enviar toda a consulta externa aos shards em views triviais sobre tabelas Distributed."}]}]} />

Quando habilitada, em views sobre tabelas [Distributed](/pt-BR/reference/engines/table-engines/special/distributed) cuja lista `SELECT` contenha apenas referências a colunas, `*`
ou expressões (sem funções de janela nem subconsultas escalares) e que não tenham agregação, agrupamento, ordenação ou junções, toda a consulta externa é enviada a
cada shard. Isso permite que o shard aplique localmente os filtros e as expressões da view, reduzindo a quantidade de dados transferidos pela rede.

Valores possíveis:

* 0 — A otimização está desabilitada; as views sobre tabelas `Distributed` são sempre executadas no coordenador.
* 1 — A otimização está habilitada.
