PostgreSQL:GIN
일반화된 역 인덱스 (Generalized Inverted Index; GIN) 는 처리할 쿼리가 복합적인 데이터인 경우에 사용하면 좋은 성능을 보여주는 인덱스입니다.
GIN 인덱스란?
PostgreSQL에서 배열, JSONB, 전문 검색(full-text search) 같은 복합 데이터 타입을 효율적으로 검색하기 위한 인덱스 방식입니다.
주요 특징
- 배열 요소 검색: 배열 안의 특정 값을 빠르게 찾을 수 있음
- 포함 관계 검색:
@>,<@,&&같은 연산자에 최적화 - 읽기 성능: 검색이 매우 빠름
- 쓰기 성능: 데이터 삽입/수정 시 B-tree보다 느림
사용 예시
-- tags 배열 컬럼에 GIN 인덱스 생성
-- Create GIN index on tags array column
CREATE INDEX IF NOT EXISTS idx_proj_tags ON proj USING GIN(tags);
-- 특정 태그를 포함한 프로젝트 검색 (빠름!)
-- Search for projects containing specific tag (fast!)
SELECT * FROM proj WHERE tags @> ARRAY['python'];
-- 여러 태그 중 하나라도 포함
-- Contains any of multiple tags
SELECT * FROM proj WHERE tags && ARRAY['python', 'web'];
-- 태그가 정확히 포함되어 있는지
-- Check if tags are contained
SELECT * FROM proj WHERE ARRAY['python'] <@ tags;