전체 용어 목록

GIN 인덱스

PostgreSQL의 GIN 인덱스란 무엇인가요?

GIN(범용 역 인덱스)은 배열 요소, JSONB 키, 텍스트 검색 단어처럼 값 안에 있는 각 요소를 해당 요소를 포함하는 행에 매핑합니다.

GIN은 Generalized Inverted Index(범용 역 인덱스)의 약자입니다. 인덱싱되는 각 항목이 여러 요소를 포함하는 복합 값과, 특정 요소를 포함하는 항목을 찾는 쿼리를 위해 설계되었습니다. 대표적인 용도는 배열, jsonb, 전문 검색입니다.

기본 연산자 클래스에서 GIN은 배열에 대해 @>(포함)와 &&(겹침) 같은 연산자를, jsonb에 대해 @>와 키 존재 연산자를 지원합니다. 조회는 빠르지만 삽입과 업데이트 비용은 B-tree보다 큽니다. 기본적으로 켜져 있는 fastupdate 저장 매개변수는 새 항목을 대기 목록(pending list)에 버퍼링해 이 비용을 완화합니다.

예제

이 예제는 text[] 열에 GIN 인덱스를 만들고 tags에 t42가 포함된 행에 대해 EXPLAIN으로 확인합니다. 출력에는 Bitmap Index Scan on docs_tags_gin이 표시됩니다.

CREATE TABLE docs (id int PRIMARY KEY, tags text[]);
INSERT INTO docs
SELECT g, ARRAY['t' || (g % 100), 'u' || (g % 7)] FROM generate_series(1, 100000) AS g;
CREATE INDEX docs_tags_gin ON docs USING gin (tags);
ANALYZE docs;

EXPLAIN SELECT id FROM docs WHERE tags @> ARRAY['t42'];

확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.

출처

PostgreSQL 공식 문서(영문)입니다.

관련 용어