관리 메뉴

밤 늦게까지 여는 카페

PostgreSQL 기간 별 검색 최적화 본문

데이터베이스/PostgresQL

PostgreSQL 기간 별 검색 최적화

Jㅐ둥이 2022. 10. 2. 04:02

데이터베이스를 사용하다보면 기간 별로 데이터를 검색하는 경우가 많이 있습니다.

 

초기에는 데이터 양이 적어서 검색하는데 시간이 오래 걸리지 않습니만

시간이 흘러서 데이터 양이 많아지면 한번 조회할 때마다 수십초 씩 오래 걸리게 됩니다.

 

이번에는 기간 별 검색을 최적화 하는 방법에 대해서 공부해보겠습니다.

공부할 내용은 1) 인덱스, 2) 파티셔닝입니다.

 

1. 인덱스

데이터베이스는 데이터 조회를 최적화 하기 위해서 특정 필드들을 이용해서 데이터들을 정렬시켜 놓습니다.

이것이 인덱싱인데요. 인덱스로 설정된 필드를 이용해서 데이터를 조회할 때는 비교적 빠르게 조회할 수 있습니다.

 

그래서 날짜 컬럼에 인덱스를 생성하면 조회 속도를 향상시킬 수 있는 것입니다.

다음 명령어를 이용해서 인덱스를 생성할 수 있습니다.

CREATE INDEX ON {TABLE_NAME} {COLUMN_NAME}

 

※ 그렇다고 인덱스를 모든 필드에 생성해버리면 오히려 조회 속도가 느려질 수 있으니 주의해서 사용하셔야 됩니다!

2. 파티셔닝

1번의 방법으로 인덱스를 생성했다고 문제가 해결되는 것은 아닙니다.

데이터 양이 많아지면 조회 속도가 느려지는 것은 인덱스를 사용하더라도 막을 수 없는 것이죠.

 

그러면 데이터 양을 제한하는 것도 조회 속도를 올릴 수 있는 방법이겠죠?

유저가 서비스를 사용하면 자동으로 데이터가 저장되는데 데이터 양을 어떻게 제한할 수 있을까요?

 

파티션 테이블을 이용하여 제한할 수 있습니다.

테이블을 만들 때 다음과 같이 뒤에 PARTIOTION BY RANGE(date)를 붙여주면 됩니다.

CREATE TABLE data (
    id UUID PRIMARY KEY,
    date DATE NOT NULL,
    message TEXT
) PARTITION BY RANGE(date);

그리고 데이터를 나눠서 저장할 파티션을 다음과 같이 생성하면  됩니다.

CREATE TABLE data_2022_01 PARTITION OF data
    FOR VALUES FROM ('2022-01-01') TO ('2022-01-31');

CREATE TABLE data_2022_02 PARTITION OF data
    FOR VALUES FROM ('2022-02-01') TO ('2022-02-28');
    
CREATE TABLE data_2022_03 PARTITION OF data
    FOR VALUES FROM ('2022-03-01') TO ('2022-03-31');
반응형