시계열 인덱스 선택
시계열 작업 부하에 적합한 인덱스를 선택해보세요. 복합 인덱스 (device_id, ts DESC)는 일반적인 패턴을 지원합니다.
시계열 인덱스 선택은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
일반적인 시계열 쿼리
"한 엔터티의 최근 데이터":
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;복합 인덱스 (device_id, ts DESC)
시계열 데이터의 표준 인덱스:
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.순서가 중요한 이유
- (device_id, ts) — "이 장치의 최근 데이터"에 가장 적합
- (ts, device_id) — "이 시점의 모든 장치"에 가장 적합
쿼리 구성에 따라 선택하십시오.
추가 전용 테이블을 위한 BRIN
BRIN은 매우 작습니다. 10억 행 테이블에서도 몇 MB에 불과합니다. 인덱싱된 열을 기준으로 데이터가 물리적으로 정렬되어 있을 때만 효과적입니다(시계열 데이터는 일반적으로 그렇습니다).
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.B-tree와 BRIN 비교
- B-tree — 정확한 id를 밀리초 단위로 조회하고 최근 시간을 기준으로 조회
- BRIN — 단조 증가 데이터의 범위 스캔을 빠르게 수행하며 유지 비용이 저렴
함께 사용할 수도 있습니다. (device_id)에는 B-tree를, (ts)에는 BRIN을 사용하십시오.
하이퍼테이블 인덱스
TimescaleDB는 모든 청크에 인덱스를 전파합니다. 사용하지 않는 인덱스는 삭제하십시오. 모든 청크에서 비용이 발생합니다.
자주 조회되는 부분집합을 위한 부분 인덱스
쿼리의 99%가 최근 데이터를 대상으로 한다면:
CREATE INDEX metrics_recent_idx
ON metrics (device_id, ts DESC)
WHERE ts >= NOW() - INTERVAL '7 days';
-- Issue: predicate must use literal date or be re-created periodically.인덱스 열에 함수를 적용하지 않기
인덱스 열에 함수를 적용하지 마십시오. 인덱스를 사용할 수 없게 됩니다.
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'최신 행 쿼리를 위한 인덱스
"장치별 최신 측정값"을 조회할 때는 적절한 인덱스를 사용하면 쿼리가 인덱스 범위 스캔으로 변환됩니다.
CREATE INDEX metrics_device_ts_idx ON metrics (device_id, ts DESC);
SELECT DISTINCT ON (device_id) device_id, ts, value
FROM metrics
ORDER BY device_id, ts DESC;
-- Uses the index to take the first row per device.자주 조회하는 순서로 CLUSTER 수행
CLUSTER는 인덱스를 기준으로 테이블을 물리적으로 재정렬합니다. 일회성 작업이며, 새 데이터는 계속 도착한 순서대로 추가됩니다.
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.높은 카디널리티 동등 조건을 위한 해시 인덱스
시계열 데이터에서는 거의 사용하지 않지만 이러한 인덱스도 있습니다. 일반적으로 device_id에는 B-tree만으로 충분합니다.
인덱스를 과도하게 만들지 않기
시계열 테이블은 쓰기 작업이 많습니다. 인덱스 하나마다 쓰기 증폭이 발생합니다. 실제로 조회하는 항목에만 추가하십시오.
요약
시계열 인덱싱은 몇 가지 패턴으로 정리할 수 있습니다.
- 엔터티별 쿼리에는 복합 (entity, ts DESC)
- 추가 전용 범위 쿼리에는 ts의 BRIN
- 하이퍼테이블에서는 인덱스가 청크에 전파됨
- 열에 함수를 적용하는 조건은 피하기
빠른 확인
가장 자주 실행되는 시계열 쿼리가 device_id로 필터링하고 최근 24시간을 읽습니다. 가장 적합한 인덱스는 무엇일까요?
AI 튜터와 함께 SQL을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 46
- 레슨
- 183
자주 묻는 질문
“시계열 인덱스 선택” 강의는 무료인가요?
네 — “시계열 인덱스 선택” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“시계열 인덱스 선택”에서 뭘 배우나요?
시계열 작업 부하에 적합한 인덱스를 선택해보세요. 복합 인덱스 (device_id, ts DESC)는 일반적인 패턴을 지원합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“시계열 인덱스 선택” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- TimescaleDB 하이퍼테이블
- 연속 집계
- 압축 및 보존 정책
- 시계열 인덱스 선택