Essas configurações estão disponíveis em system.settings e são autogeradas a partir do código-fonte.
optimize_trivial_approximate_count_query
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.
optimize_trivial_count_query
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_trivial_count_with_sparsity_filter
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.8 | 1 | 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). |
| 26.7 | 0 | 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 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)paraInt*/UInt*,String/FixedString,Date/DateTime/DateTime64,Decimal*,UUID,IPv4/IPv6.IS NULL/IS NOT NULLem colunasNullable.empty(col)/notEmpty(col)em colunasString.col = true/col != trueem colunasBool.col > 0,col >= 1,col < 1,col <= 0em colunas de inteiros sem sinal.colisolada /NOT colem colunasInt*,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_group_by_limit_query
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.5 | 1 | 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, funções de janela ou arrayJoin na projeção, sem cláusulas HAVING/ORDER BY/QUALIFY/LIMIT BY/DISTINCT/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.
optimize_trivial_insert_select
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 24.7 | 0 | A otimização não faz sentido em muitos casos. |
Otimizar a consulta trivial 'INSERT INTO table SELECT … FROM TABLES'
optimize_trivial_view_pushdown_to_distributed
Histórico de versões
| Versão | Valor padrão | Comentário |
|---|---|---|
| 26.8 | 1 | Nova configuração para enviar toda a consulta externa aos shards em views triviais sobre tabelas Distributed. |
Quando habilitada, em views sobre tabelas 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
Distributedsão sempre executadas no coordenador. - 1 — A otimização está habilitada.