Biscuit
PostgreSQL에서 LIKE / ILIKE 패턴 검색을 고속화하기 위한 전용 인덱스
About
- 와일드카드가 많은 문자열 검색을 빠르게 처리하기 위해 설계된 PostgreSQL 전용 인덱스 접근 방식(IAM)
- 불필요한 heap 접근과 성능 손실이 구조적으로 발생하는 pg_trgm의 한계를 보완
문자와 위치를 기준으로 한 Bitmap Position Index를 사용해, 후보 결과를 메모리 내 비트맵 연산으로 정확하게 필터링 - 검색 결과에 대해 heap recheck가 필요 없어 불필요한 랜덤 I/O 제거
문자열의 앞·뒤 위치를 모두 인덱싱하는 양방향(positive / negative) 인덱스 구조를 통해 prefix, suffix, substring 패턴을 효율적으로 처리 대소문자 구분 없는 검색을 위한 ILIKE 전용 인덱스 경로를 내부적으로 분리해 정확성과 성능을 동시에 확보 단일 컬럼뿐 아니라 멀티 컬럼 LIKE 조건을 하나의 인덱스로 처리할 수 있도록 설계 - 각 컬럼의 패턴 선택도를 분석해 자동으로 실행 순서를 재정렬
%, _가 혼합된 복잡한 패턴에서도 거짓 양성(false positive)이 발생하지 않는 결정적 검색 결과 제공 COUNT, EXISTS 같은 집계 쿼리에서도 불필요한 정렬을 생략해 처리 속도 개선 Roaring Bitmap(CRoaring) 기반 구현으로, 데이터 밀도에 따라 메모리 사용을 자동 최적화 ORDER BY를 직접 지원하지는 않지만, 결과 집합이 작아진 이후 정렬이 이뤄지도록 플래너와 자연스럽게 결합 정규식, 유사도 검색, locale 기반 collation은 지원하지 않는 대신 LIKE / ILIKE 특화 성능에 집중한 설계 See also
Favorite site