optimize_or_like_chain
Optimise plusieurs prédicatsOR LIKE/ILIKE/match sur une même expression en un seul multiSearchAny/multiSearchAnyCaseInsensitiveUTF8 (pour les motifs %needle% de sous-chaîne pure) ou multiMatchAny (pour les autres motifs, lorsque Hyperscan/Vectorscan est autorisé). Lorsqu’aucun chemin rapide n’est applicable — par exemple si Hyperscan est désactivé ou indisponible, si les motifs sont des expressions régulières match brutes, ne sont pas en UTF-8 valide, contiennent un NUL intégré, sont ancrés en fin (ne se terminent pas par un % non échappé ; Vectorscan fait correspondre $ avant un saut de ligne final, de sorte que la réécriture élargirait le filtre), ou si la chaîne recherchée est de type FixedString/Enum — la chaîne OR d’origine est conservée telle quelle, car une alternance match combinée sur RE2 est systématiquement plus lente que le OR d’origine à court-circuit.
Pour les chaînes OR pures de LIKE/ILIKE/match, les expressions d’origine sont conservées dans indexHint() afin de permettre l’analyse d’index ; les chaînes OR mixtes qui incluent des branches non-LIKE n’utilisent volontairement pas l’encapsulation indexHint() afin que les plages correspondant uniquement à la branche non-LIKE ne soient pas élaguées. La réécriture multiMatchAny respecte allow_hyperscan, max_hyperscan_regexp_length, max_hyperscan_regexp_total_length et reject_expensive_hyperscan_regexps.
Une chaîne n’est réécrite que lorsqu’elle comporte suffisamment de branches partageant la même expression de gauche pour que la réécriture soit de façon fiable plus rapide qu’une évaluation OR en court-circuit : au moins optimize_or_like_chain_min_substrings branches pour le chemin multiSearchAny, et au moins optimize_or_like_chain_min_patterns branches pour le chemin multiMatchAny.
optimize_or_like_chain_min_patterns
Nombre minimal de branchesLIKE/ILIKE/match non de type sous-chaîne pure (motifs de préfixe/suffixe/regexp), partageant la même expression de gauche, requis pour que optimize_or_like_chain réécrive une chaîne en multiMatchAny. Calibré sur le jeu de données hits (voir tests/performance/optimize_or_like_chain_hits.xml) : la réécriture en multiMatchAny (Hyperscan) de chaînes LIKE de préfixe/regexp ne devient plus rapide que l’évaluation OR en court-circuit qu’à partir d’environ neuf branches ; les chaînes plus courtes sont donc conservées telles quelles afin d’éviter toute régression. Une valeur de 0 ou 1 désactive ce seuil. N’a aucun effet lorsque optimize_or_like_chain est désactivé. Voir aussi optimize_or_like_chain_min_substrings pour le cas sous-chaîne pure (multiSearchAny).
optimize_or_like_chain_min_substrings
Nombre minimal de branchesLIKE/ILIKE de type sous-chaîne pure (%needle%), partageant la même expression de gauche, nécessaire pour que optimize_or_like_chain réécrive une chaîne en multiSearchAny/multiSearchAnyCaseInsensitiveUTF8. Étalonné sur le jeu de données hits (voir tests/performance/optimize_or_like_chain_hits.xml) : la réécriture en multiSearchAny devient plus rapide que l’évaluation OR en court-circuit à partir d’environ quatre branches. Une valeur de 0 ou 1 désactive le seuil. N’a aucun effet lorsque optimize_or_like_chain est désactivé. Voir aussi optimize_or_like_chain_min_patterns pour le chemin regexp (multiMatchAny).