optimize_limit_by_* 세션 설정
optimize_limit_by_* 세션 설정
이 페이지에서는 LIMIT BY 절 최적화와 관련된 optimize_limit_by_* 세션 설정들을 다뤄요. 다른 키의 함수를 제거하거나 LIMIT N BY 쿼리를 정렬 키 순서에 맞춰 메모리 효율적으로 실행하는 최적화를 제어해요. 이 설정들은 system.settings 테이블에서 확인할 수 있으며 ClickHouse 소스에서 자동 생성돼요.
출처: 문서
본문
이 설정들은 system.settings에서 확인할 수 있으며 소스에서 자동 생성돼요.
optimize_limit_by_function_keys
LIMIT BY 절에서 다른 키의 함수를 제거해요.
예: LIMIT 5 BY x, f(x)는 LIMIT 5 BY x가 돼요.
optimize_limit_by_in_order
<cols>(임의의 순서)가 테이블의 정렬 키 접두사를 이루거나, WHERE col = const가 선행 컬럼을 고정한 뒤 그러한 접두사가 될 때 SELECT ... LIMIT N BY <cols> 쿼리를 최적화해요. 활성화하면 소스가 기본 키 순서로 데이터를 읽으므로, BY 컬럼 값이 같은 행들이 각 스트림 내에서 인접하게 도착해요. 데이터가 단일 정렬 스트림으로 도착하면 LIMIT BY는 각각의 BY 컬럼 조합에 대한 해시 테이블을 만들지 않고 O(1) 메모리로 스트리밍 모드에서 필터링해요. 정렬된 데이터가 여러 스트림으로 도착하고 같은 BY 값이 둘 이상의 스트림에 나타날 수 있다면, 각 스트림을 먼저 그룹당 최대 LIMIT + OFFSET 행까지 스트리밍 모드로 사전 필터링한 다음 스트림들을 결합하고, 마지막 해시 기반 LIMIT BY로 여러 스트림에 걸친 그룹을 중복 제거해요. 그 마지막 패스는 여전히 모든 BY 컬럼 조합에 대한 항목을 유지하지만, 사전 필터링된 행만 처리해요.