Skip to main content
Эти настройки доступны в system.settings и автоматически генерируются на основе исходного кода.

optimize_or_like_chain

Оптимизирует несколько предикатов OR LIKE/ILIKE/match для одного и того же выражения в один вызов multiSearchAny/multiSearchAnyCaseInsensitiveUTF8 (для шаблонов %needle% типа чистая подстрока) или multiMatchAny (для других шаблонов, если разрешён Hyperscan/Vectorscan). Если ни один быстрый путь не применим — например, если Hyperscan отключён или недоступен, либо шаблоны представляют собой необработанные регулярные выражения match, не являются корректным UTF-8, содержат встроенный NUL или искомая строка имеет тип FixedString/Enum, — исходная цепочка OR остаётся без изменений, поскольку объединённая альтернатива match на базе RE2 стабильно работает медленнее, чем исходный OR с коротким замыканием. Оптимизация применяется только с анализатором (enable_analyzer = 1, по умолчанию); со старым анализатором (enable_analyzer = 0) цепочка OR остаётся без изменений. Для чистых цепочек OR из LIKE/ILIKE/match исходные выражения сохраняются в indexHint(), чтобы была возможна проверка индексов; смешанные цепочки OR, включающие не-LIKE ветви, намеренно не оборачиваются в indexHint(), чтобы диапазоны, соответствующие только не-LIKE ветви, не отсекались. Переписывание в multiMatchAny учитывает allow_hyperscan, max_hyperscan_regexp_length, max_hyperscan_regexp_total_length и reject_expensive_hyperscan_regexps. Цепочка переписывается только тогда, когда в ней достаточно ветвей с одинаковым выражением в левой части, чтобы такое переписывание гарантированно работало быстрее, чем вычисление OR с коротким замыканием: не менее optimize_or_like_chain_min_substrings ветвей для пути multiSearchAny и не менее optimize_or_like_chain_min_patterns ветвей для пути multiMatchAny.

optimize_or_like_chain_min_patterns

Минимальное число ветвей LIKE/ILIKE/match, не относящихся к чистой подстроке (шаблоны prefix/suffix/regexp) и использующих одно и то же выражение в левой части, необходимое для того, чтобы optimize_or_like_chain переписал цепочку в multiMatchAny. Порог откалиброван на наборе данных hits (см. tests/performance/optimize_or_like_chain_hits.xml): переписывание цепочек LIKE с шаблонами prefix/regexp в multiMatchAny (Hyperscan) начинает работать быстрее, чем вычисление OR с коротким замыканием, только примерно с девяти ветвей, поэтому более короткие цепочки оставляются без изменений, чтобы не ухудшать их производительность. Значение 0 или 1 отключает этот порог. Не действует, если optimize_or_like_chain отключён. См. также optimize_or_like_chain_min_substrings для варианта с чистой подстрокой (multiSearchAny).

optimize_or_like_chain_min_substrings

Минимальное число ветвей LIKE/ILIKE с чистой подстрокой (%needle%) и одним и тем же выражением в левой части, необходимое для того, чтобы optimize_or_like_chain переписал цепочку в multiSearchAny/multiSearchAnyCaseInsensitiveUTF8. Порог подобран по набору данных hits (см. tests/performance/optimize_or_like_chain_hits.xml): переписывание в multiSearchAny становится быстрее, чем вычисление OR с коротким замыканием, примерно начиная с четырёх ветвей. Значение 0 или 1 отключает порог. Не действует, если optimize_or_like_chain отключён. См. также optimize_or_like_chain_min_patterns для пути с regexp (multiMatchAny).
Последнее изменение 23 июля 2026 г.