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'); 3) 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 인덱스 = 연속적 시간 컬럼에 최적화된 작은 범위 인덱스 조합 = 대용량 시계열 데이터 + 낮은 디스크 사용 + 빠른 범위 쿼리