본문 바로가기

플젝 구현내용 정리

PostgreSQL DB에 INDEX를 적용 했을 때 여전히 느린 경우

728x90
반응형

SI 프로젝트 수행 중 대량 데이터가 저장되어 있는 테이블의 조회 속도가 너무 느려서 Index를 설정했었다.

그런데 Index를 설정 해도 여전히 느렸는데 이유를 알고 보니 중복 값이 너무 많았었다.

PK이지만 중복값이 많을때에는 아무리 인덱스를 걸어도 제 속도가 안 나오는 거 같았다.

그래서 다른 컬럼에 인덱스를 걸어서 다중 칼럼 인덱스로 인덱스를 설정 후 보다 나은 검색속도를 보였던 것을 기억한다.

 

그래서 아래의 내용을 정리해 보고자 한다.

 

PostgreSQL에서 특정 컬럼에 중복값이 많으면 검색 속도가 느려질 수 있다.

인덱스는 중복값이 적을 때 더 효율적으로 작동한다.

중복값이 많으면 인덱스의 선택성이 낮아져서 검색 성능이 저하될 수 있다.

 

이를 해결하기 위해 다음과 같은 방법을 고려할 수 있다:

  1. 다중 컬럼 인덱스: 중복값이 많은 칼럼과 다른 칼럼을 함께 인덱싱하여 선택성을 높인다.
  2. 클러스터링: 테이블을 특정 인덱스를 기준으로 클러스터링 하여 데이터의 물리적 순서를 변경한다.
  3. 파티셔닝: 테이블을 파티셔닝하여 데이터의 범위를 나누고 검색 범위를 줄인다.

예를 들어, 다중 컬럼 인덱스를 생성하는 방법은 다음과 같다:

CREATE INDEX idx_multi_column ON table_name (column1, column2);

클러스터링을 사용하는 방법은 다음과 같다:

CLUSTER table_name USING idx_multi_column;

파티셔닝을 사용하는 방법은 다음과 같다:

CREATE TABLE table_name (
    column1 type,
    column2 type,
    ...
) PARTITION BY RANGE (column1);

CREATE TABLE table_name_part1 PARTITION OF table_name FOR VALUES FROM (start_value) TO (end_value);
CREATE TABLE table_name_part2 PARTITION OF table_name FOR VALUES FROM (start_value) TO (end_value);

이러한 방법들을 통해 검색 성능을 개선할 수 있다.

 

- 끝 -

728x90
반응형