Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

paramètres de session optimize_or_like_chain_*

Ces paramètres sont disponibles dans system.settings et sont générés automatiquement à partir du source.

optimize_or_like_chain

Type
Bool
Par défaut
1
Historique des versions
VersionValeur par défautCommentaire
26.71Activé par défaut : optimise les chaînes OR de LIKE/ILIKE/match en multiSearchAny (motifs de sous-chaîne pure) ou multiMatchAny (autres motifs, lorsque Hyperscan/Vectorscan est autorisé) ; si aucun chemin rapide ne s’applique, la chaîne OR d’origine est conservée telle quelle.

Optimise plusieurs prédicats OR 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é, 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.

L’optimisation n’est appliquée qu’avec l’analyseur (enable_analyzer = 1, valeur par défaut) ; avec l’ancien analyseur (enable_analyzer = 0), la chaîne OR reste inchangée. 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 à 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

Type
UInt64
Par défaut
10
Historique des versions
VersionValeur par défautCommentaire
26.710Nouveau paramètre contrôlant le nombre minimal de branches LIKE/ILIKE/match non de type sous-chaîne pure (partageant la même expression de gauche) requis pour que optimize_or_like_chain réécrive une chaîne en multiMatchAny. Les chaînes plus courtes sont conservées telles quelles, car la réécriture en multiMatchAny (Hyperscan) ne devient plus rapide que l'évaluation OR en court-circuit qu'à partir d'environ neuf branches.

Nombre minimal de branches LIKE/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

Type
UInt64
Par défaut
4
Historique des versions
VersionValeur par défautCommentaire
26.74Nouveau paramètre contrôlant le nombre minimal de branches LIKE/ILIKE de 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.

Nombre minimal de branches LIKE/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).

Navigation