optimize_or_like_chain
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
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
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).