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 連鎖がそのまま保持されます。これは、RE2 上で結合した match のオルタネーションは、元の短絡 OR より一貫して遅いためです。 この最適化は、アナライザ (enable_analyzer = 1、デフォルト) を使用している場合にのみ適用されます。古いアナライザ (enable_analyzer = 0) では、OR 連鎖はそのままです。純粋な LIKE/ILIKE/matchOR 連鎖では、索引解析を可能にするため、元の式が indexHint() 内に保持されます。LIKE 以外の分岐を含む混在 OR 連鎖では、LIKE 以外の分岐にのみ一致する範囲が prune されないよう、意図的に indexHint() でラップしません。multiMatchAny への書き換えでは、allow_hyperscanmax_hyperscan_regexp_lengthmax_hyperscan_regexp_total_lengthreject_expensive_hyperscan_regexps が考慮されます。 連鎖が書き換えられるのは、同じ左辺式を共有する分岐が十分な数あり、その書き換えが短絡 OR 評価より確実に高速になる場合に限られます。multiSearchAny 経路では少なくとも optimize_or_like_chain_min_substrings 分岐、multiMatchAny 経路では少なくとも optimize_or_like_chain_min_patterns 分岐が必要です。

optimize_or_like_chain_min_patterns

同じ左辺式を共有する、純粋な部分文字列ではない LIKE/ILIKE/match 分岐 (プレフィックス/接尾辞/regexp パターン) について、optimize_or_like_chain がチェーンを multiMatchAny に書き換えるために必要な最小数です。hits データセットで調整されています (tests/performance/optimize_or_like_chain_hits.xml を参照) 。プレフィックス/regexp の LIKE チェーンを multiMatchAny (Hyperscan) に書き換えた場合、short-circuit OR 評価より高速になるのはおよそ 9 個の分岐からであるため、それより短いチェーンは性能低下を避けるためそのまま維持されます。値が 0 または 1 の場合、しきい値は無効になります。optimize_or_like_chain が無効な場合は効果がありません。純粋な部分文字列 (multiSearchAny) の経路については、optimize_or_like_chain_min_substrings も参照してください。

optimize_or_like_chain_min_substrings

同じ 左辺式 を共有する 純粋な部分文字列 (%needle%) の LIKE/ILIKE 分岐について、optimize_or_like_chain が chain を multiSearchAny/multiSearchAnyCaseInsensitiveUTF8 に Rewrite するために必要な最小数です。これは hits dataset で較正されており (tests/performance/optimize_or_like_chain_hits.xml を参照) 、およそ 4 つの分岐から multiSearchAny への Rewrite が short-circuit OR 評価より高速になります。値が 0 または 1 の場合、このしきい値は無効になります。optimize_or_like_chain が無効な場合は効果がありません。正規表現 (multiMatchAny) の経路については、optimize_or_like_chain_min_patterns も参照してください。
最終更新日 2026年7月23日