Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

configurações de sessão de optimize_or_like_chain_*

Estas configurações estão disponíveis em system.settings e são geradas automaticamente a partir do código-fonte.

optimize_or_like_chain

Tipo
Bool
Padrão
1
Histórico de versões
VersãoValor padrãoComentário
26.71Habilitado por padrão: otimiza cadeias de OR com LIKE/ILIKE/match em multiSearchAny (padrões pure-substring) ou multiMatchAny (outros padrões, quando Hyperscan/Vectorscan é permitido); quando nenhum caminho rápido se aplica, a cadeia OR original é mantida inalterada.

Otimiza vários predicados OR LIKE/ILIKE/match sobre a mesma expressão em um único multiSearchAny/multiSearchAnyCaseInsensitiveUTF8 (para padrões %needle% pure-substring) ou multiMatchAny (para outros padrões, quando Hyperscan/Vectorscan é permitido). Quando nenhum caminho rápido é aplicável — por exemplo, quando o Hyperscan está desabilitado ou indisponível, ou os padrões são regexps match brutas, não são UTF-8 válidos, contêm um NUL embutido, ou o haystack é FixedString/Enum — a cadeia OR original é mantida inalterada, porque uma alternância match combinada em RE2 é consistentemente mais lenta do que o OR original em curto-circuito.

A otimização é aplicada apenas com o analyzer (enable_analyzer = 1, o padrão); com o analyzer antigo (enable_analyzer = 0), a cadeia OR permanece inalterada. Para cadeias OR puras de LIKE/ILIKE/match, as expressões originais são preservadas em indexHint() para permitir a análise de índice; cadeias OR mistas que incluem ramos não LIKE intencionalmente ignoram o encapsulamento em indexHint(), para que intervalos que correspondam apenas ao ramo não LIKE não sejam podados. A reescrita de multiMatchAny respeita allow_hyperscan, max_hyperscan_regexp_length, max_hyperscan_regexp_total_length e reject_expensive_hyperscan_regexps.

Uma cadeia é reescrita apenas quando tem ramos suficientes compartilhando a mesma expressão do lado esquerdo para tornar a reescrita, de forma confiável, mais rápida do que a avaliação de OR em curto-circuito: pelo menos optimize_or_like_chain_min_substrings ramos para o caminho multiSearchAny e pelo menos optimize_or_like_chain_min_patterns ramos para o caminho multiMatchAny.

optimize_or_like_chain_min_patterns

Tipo
UInt64
Padrão
10
Histórico de versões
VersãoValor padrãoComentário
26.710Nova configuração que controla o número mínimo de ramos `LIKE`/`ILIKE`/`match` não pure-substring (compartilhando a mesma expressão do lado esquerdo) necessário para que `optimize_or_like_chain` reescreva uma cadeia em `multiMatchAny`. Cadeias mais curtas são mantidas como estão porque a reescrita para `multiMatchAny` (Hyperscan) só se torna mais rápida do que a avaliação `OR` em curto-circuito a partir de cerca de nove ramos.

Número mínimo de ramos LIKE/ILIKE/match não pure-substring (padrões de prefixo/sufixo/regexp), compartilhando a mesma expressão do lado esquerdo, necessário para que optimize_or_like_chain reescreva uma cadeia em multiMatchAny. Calibrado no conjunto de dados hits (consulte tests/performance/optimize_or_like_chain_hits.xml): uma reescrita para multiMatchAny (Hyperscan) de cadeias LIKE de prefixo/regexp só se torna mais rápida do que a avaliação OR em curto-circuito a partir de cerca de nove ramos, portanto cadeias mais curtas são mantidas como estão para evitar regressão de desempenho. Um valor de 0 ou 1 desabilita o limite. Não tem efeito quando optimize_or_like_chain está desabilitado. Veja também optimize_or_like_chain_min_substrings para o caminho pure-substring (multiSearchAny).

optimize_or_like_chain_min_substrings

Tipo
UInt64
Padrão
4
Histórico de versões
VersãoValor padrãoComentário
26.74Nova configuração que controla o número mínimo de ramos `LIKE`/`ILIKE` de substring pura (%needle%), com a mesma expressão do lado esquerdo, necessário para que `optimize_or_like_chain` reescreva uma cadeia como `multiSearchAny`.

Número mínimo de ramos LIKE/ILIKE de substring pura (%needle%), com a mesma expressão do lado esquerdo, necessário para que optimize_or_like_chain reescreva uma cadeia como multiSearchAny/multiSearchAnyCaseInsensitiveUTF8. Calibrado com o dataset hits (consulte tests/performance/optimize_or_like_chain_hits.xml): a reescrita para multiSearchAny passa a ser mais rápida do que a avaliação de OR em curto-circuito a partir de cerca de quatro ramos. Um valor 0 ou 1 desabilita o limite. Não tem efeito quando optimize_or_like_chain está desabilitado. Consulte também optimize_or_like_chain_min_patterns para o caminho de regexp (multiMatchAny).

Navigation