Skip to content

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;

See also