- Published on
ClickHouse의 lazy materialization은 정렬과 LIMIT이 끝나기 전에는 SELECT 컬럼을 읽지 않는 최적화로, 25.4(2025년 4월)에 LIMIT 10 이하에서만 켜지는 보수적인 기능으로 출발했습니다. 이후 행 단위 lookup을 조인 스타일 일괄 조회로 갈아엎은 25.12에서 게이트가 10,000까지 올라갔고, 2026년에는 26.2의 UNION ALL 전 브랜치, 26.4의 ReplacingMergeTree FINAL(옵트인), 26.6의 JOIN 뒤 selective LIMIT까지 같은 아이디어가 확장됐습니다. 이 글은 그 확장 과정을 changelog·설정 히스토리·PR 같은 1차 소스로 추적하고, 벤더가 공개한 1,576배 벤치마크가 어떤 조건(cold cache, 125MiB/s로 캡된 디스크, 약 27GiB짜리 텍스트 컬럼)에서 나온 숫자인지, 그리고 무엇이 공개되지 않았는지(hot cache 수치, 다른 쿼리 모양) 짚습니다. 벤더 자신의 데모에서 LIMIT 100,000일 때 옛 lazy 방식이 eager 읽기보다 5배 가까이 느렸다는 수치도 그대로 실었습니다 — 이 기능이 왜 게이트 뒤에 있는지, 언제 이득이 없는지를 판단하는 데 필요한 재료입니다.