optimize_or_like_chain_* 세션 설정

optimize_or_like_chain_* 세션 설정

이 페이지에서는 여러 OR LIKE/ILIKE/match 조건을 하나의 검색 함수로 결합하는 optimize_or_like_chain_* 세션 설정들을 다뤄요. 체인을 다시 작성하기 위한 최소 분기 수를 설정하여 성능을 개선해요. 이 설정들은 system.settings 테이블에서 확인할 수 있으며 ClickHouse 소스에서 자동 생성돼요.

출처: 문서

본문

이 설정들은 system.settings에서 확인할 수 있으며 소스에서 자동 생성돼요.

optimize_or_like_chain

같은 표현식에 대한 여러 OR LIKE/ILIKE/match 조건을 단일 multiSearchAny/multiSearchAnyCaseInsensitiveUTF8(순수 부분 문자열 %needle% 패턴의 경우) 또는 multiMatchAny(다른 패턴으로 Hyperscan/Vectorscan이 허용된 경우)로 최적화해요. 어떤 빠른 경로도 적용할 수 없을 때 — 예를 들어 Hyperscan이 비활성화되거나 사용할 수 없거나, 패턴이 원시 match 정규식이거나, 유효한 UTF-8이 아니거나, 내장 NUL을 포함하거나, 끝에 고정되었거나(이스케이프되지 않은 %로 끝나지 않거나; Vectorscan은 마지막 줄바꿈 앞에서 $와 일치하므로 재작성은 필터를 넓힐 수 있어요), haystack이 FixedString/Enum일 때 — 원래 OR 체인은 그대로 유지돼요. RE2 위의 결합 match alternation이 원래의 단락(short-circuit) OR보다 일관되게 느리기 때문이에요. 순수 LIKE/ILIKE/match OR 체인에서는 인덱스 분석을 위해 원래 표현식이 indexHint()에 보존돼요. LIKE가 아닌 분기를 포함하는 혼합 OR 체인은 의도적으로 indexHint() 감싸기를 생략해서, LIKE가 아닌 분기에만 일치하는 범위가 절단되지 않도록 해요. multiMatchAny 재작성은 allow_hyperscan, max_hyperscan_regexp_length, max_hyperscan_regexp_total_length, reject_expensive_hyperscan_regexps를 존중해요. 체인이 단락 OR 평가보다 확실히 빠르도록, 같은 좌변 표현식을 공유하는 분기가 충분히 있을 때만 재작성돼요: multiSearchAny 경로에는 최소 optimize_or_like_chain_min_substrings 분기, multiMatchAny 경로에는 최소 optimize_or_like_chain_min_patterns 분기가 필요해요.

optimize_or_like_chain_min_patterns

optimize_or_like_chain이 체인을 multiMatchAny로 재작성하는 데 필요한, 같은 좌변 표현식을 공유하는 순수 비부분문자열 LIKE/ILIKE/match 분기(접두사/접미사/정규식 패턴)의 최소 개수예요. hits 데이터셋으로 보정되었어요(참고: tests/performance/optimize_or_like_chain_hits.xml): 접두사/정규식 LIKE 체인의 multiMatchAny(Hyperscan) 재작성은 약 9개 분기부터 단락 OR 평가보다 빨라지므로, 더 짧은 체인은 회귀를 피하기 위해 그대로 유지돼요. 0 또는 1 값은 임계값을 비활성화해요. optimize_or_like_chain이 비활성화되면 효과가 없어요. 순수 부분문자열(multiSearchAny) 경로는 optimize_or_like_chain_min_substrings도 참고하세요.

optimize_or_like_chain_min_substrings

optimize_or_like_chain이 체인을 multiSearchAny/multiSearchAnyCaseInsensitiveUTF8로 재작성하는 데 필요한, 같은 좌변 표현식을 공유하는 순수 부분문자열(%needle%) LIKE/ILIKE 분기의 최소 개수예요. hits 데이터셋으로 보정되었어요(참고: tests/performance/optimize_or_like_chain_hits.xml): multiSearchAny 재작성은 약 4개 분기부터 단락 OR 평가보다 빨라져요. 0 또는 1 값은 임계값을 비활성화해요. optimize_or_like_chain이 비활성화되면 효과가 없어요. 정규식(multiMatchAny) 경로는 optimize_or_like_chain_min_patterns도 참고하세요.

더 알아보기 (Learn more)