Files
dbserver/.Notebook/BRIN 설명.md

3.6 KiB
Raw Permalink Blame History

1 BRIN 인덱스란?

Block Range INdex 의 약자

대용량 테이블에서 연속적인 값(순차적/시간적)에 최적화

일반 B-Tree 인덱스보다 작고 빠르게 생성 가능

하지만 랜덤값 검색에는 적합하지 않음

💡 요약:

특징 설명 장점 작은 크기, 빠른 생성, 디스크 절약 단점 랜덤/불규칙 값 검색 느림 사용 예 날짜, 시퀀스, ID 등 순차적 값 컬럼 2 BRIN 인덱스 생성 기본 문법 CREATE INDEX index_name ON table_name USING brin (column_name);

예제:

CREATE INDEX brin_test_table_age ON test_table USING brin (age);

test_table의 age 컬럼에 BRIN 인덱스 생성

대량 데이터에서 범위 검색할 때 효율적

3 BRIN 인덱스 옵션 CREATE INDEX brin_test_table_age ON test_table USING brin (age) WITH (pages_per_range = 32);

pages_per_range → 한 인덱스 범위에 몇 페이지를 묶을지 설정 (기본값 128)

범위를 작게 하면 검색 정확도 ↑, 인덱스 크기 ↑

범위를 크게 하면 인덱스 작고 빠름, 정확도 ↓

4 사용 예제 범위 검색 -- age가 30 이상 40 이하인 데이터 검색 SELECT * FROM test_table WHERE age BETWEEN 30 AND 40;

BRIN 인덱스를 생성하면 범위 검색이 빨라짐

작은 테이블에서는 체감 안 될 수 있음 → 수십만~수백만 행 이상에서 효과적

복합 컬럼 BRIN 인덱스 CREATE INDEX brin_test_table_name_age ON test_table USING brin (name, age);

여러 컬럼 순서대로 범위 기반 검색 가능

💡 Tip

BRIN 인덱스는 연속적인 값에서 진가

순차적 시퀀스, 타임스탬프 컬럼에 주로 사용

랜덤/고르게 분포된 값 → B-Tree 인덱스가 더 적합

1 TimescaleDB란?

PostgreSQL 기반 시계열(Time-Series) 데이터베이스 확장

하이퍼테이블(Hypertable) 구조로 자동 파티셔닝

시계열 데이터 삽입, 조회, 집계 최적화

2 BRIN + TimescaleDB의 조합

TimescaleDB는 내부적으로 하이퍼테이블 파티셔닝

시계열 데이터는 시간 컬럼 기준으로 연속적이기 때문에

BRIN 인덱스와 궁합이 매우 좋음

💡 특징:

특징 설명 인덱스 크기 BRIN → 매우 작음 삽입 속도 TimescaleDB → 초당 수십만~수백만 레코드 처리 가능 조회 효율 시간 범위 쿼리 → BRIN + 하이퍼테이블 최적화 3 기본 사용법

  1. TimescaleDB 설치 후 extension 활성화 -- PostgreSQL에서 CREATE EXTENSION IF NOT EXISTS timescaledb;

  2. 테이블을 하이퍼테이블로 변환 CREATE TABLE sensor_data ( time TIMESTAMPTZ NOT NULL, device_id INT NOT NULL, temperature DOUBLE PRECISION NOT NULL );

-- 하이퍼테이블로 변환 (시간 컬럼: time) SELECT create_hypertable('sensor_data', 'time');

  1. BRIN 인덱스 생성 -- 시간 기준 BRIN 인덱스 CREATE INDEX brin_sensor_time ON sensor_data USING brin (time);

-- 필요시 device_id 추가 가능 CREATE INDEX brin_sensor_device_time ON sensor_data USING brin (device_id, time);

시간 컬럼 순차적 → BRIN 범위 검색에 최적화

작은 인덱스로 수십억 행도 검색 가능

4 범위 조회 예제 -- 특정 시간 범위 데이터 조회 SELECT * FROM sensor_data WHERE time BETWEEN '2026-02-01 00:00:00' AND '2026-02-02 00:00:00';

BRIN 인덱스 덕분에 빠른 범위 스캔 가능

🔹 정리

TimescaleDB = 시계열 최적화 + 자동 파티셔닝

BRIN 인덱스 = 연속적 시간 컬럼에 최적화된 작은 범위 인덱스

조합 = 대용량 시계열 데이터 + 낮은 디스크 사용 + 빠른 범위 쿼리