# Biscuit - PostgreSQL에서 LIKE / ILIKE 패턴 검색을 고속화하기 위한 전용 인덱스

> Clean Markdown view of GeekNews topic #25649. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25649](https://news.hada.io/topic?id=25649)
- GeekNews Markdown: [https://news.hada.io/topic/25649.md](https://news.hada.io/topic/25649.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2026-01-08T09:31:01+09:00
- Updated: 2026-01-08T09:31:01+09:00
- Original source: [github.com/CrystallineCore](https://github.com/CrystallineCore/Biscuit)
- Points: 4
- Comments: 0

## Topic Body

- 와일드카드가 많은 문자열 검색을 빠르게 처리하기 위해 설계된 **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 특화 성능에 집중한 설계**

## Comments



_No public comments on this page._
