부분 인덱스
PostgreSQL의 부분 인덱스란 무엇인가요?
부분 인덱스는 WHERE 조건에 맞는 행만 포함하므로, 쿼리가 테이블의 명확한 일부를 대상으로 할 때 작고 빠르게 유지됩니다.
부분 인덱스는 CREATE INDEX ... WHERE의 조건으로 정의되는 테이블의 일부에 대해 만든 인덱스입니다. 조건을 만족하는 행만 인덱스 항목을 갖습니다.
부분 인덱스는 대부분의 행은 거의 조회되지 않고, 쿼리가 완료되지 않은 작업이나 미결제 주문처럼 테이블의 작은 부분에 집중될 때 효과적입니다. 플래너는 쿼리의 WHERE 절이 인덱스 조건을 함축한다는 것을 증명할 수 있을 때만 인덱스를 사용할 수 있으므로, 쿼리 조건을 인덱스 조건에 맞춰 작성하세요. 부분 고유 인덱스를 사용하면 해당 부분 집합 안에서만 고유성을 강제할 수도 있습니다.
예제
이 예제는 완료되지 않은 1%의 작업만 인덱싱합니다. EXPLAIN은 미완료 작업을 찾는 쿼리가 tasks_open_idx를 사용함을 보여 줍니다.
CREATE TABLE tasks (id int PRIMARY KEY, done boolean NOT NULL, title text);
INSERT INTO tasks
SELECT g, g % 100 <> 0, 'task ' || g FROM generate_series(1, 100000) AS g;
CREATE INDEX tasks_open_idx ON tasks (id) WHERE NOT done;
ANALYZE tasks;
EXPLAIN SELECT id, title FROM tasks WHERE NOT done;확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.
출처
PostgreSQL 공식 문서(영문)입니다.