GIN · GiST · BRIN · Hash — 언제 어떤 인덱스를 선택할 것인가
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. BRIN 인덱스가 가장 효과적인 컬럼은?
💡 BRIN은 블록 범위별 최솟값/최댓값을 저장합니다. 삽입 순서와 값 순서가 일치(상관관계가 높음)할수록 효율적입니다. 시계열 데이터의 timestamp나 자동증가 ID가 대표적인 사례입니다.
Q2. JSONB 컬럼에서 @> 연산만 사용할 때 가장 효율적인 GIN 연산자 클래스는?
💡 jsonb_path_ops는 @> 연산자만 지원하지만 인덱스 크기가 jsonb_ops보다 훨씬 작고 성능이 좋습니다. ?, ?|, ?& 연산이 필요하면 jsonb_ops(기본값)를 사용해야 합니다.
Q3. 중간 LIKE 검색(LIKE '%검색어%')을 인덱스로 최적화하려면?
💡 pg_trgm 확장을 설치하고 GIN(column gin_trgm_ops) 인덱스를 생성하면 LIKE '%검색어%' 같은 중간 와일드카드 검색도 인덱스를 사용할 수 있습니다. B-Tree는 앞 와일드카드 LIKE에 인덱스를 사용할 수 없습니다.
Q4. 기하 데이터(POINT)의 KNN(K-최근접 이웃) 검색에 적합한 인덱스는?
💡 GiST 인덱스는 <-> (거리) 연산자를 이용한 KNN 검색을 지원합니다. ORDER BY location <-> target_point LIMIT K 형태로 가장 가까운 K개의 위치를 효율적으로 찾습니다.
Q5. 전문검색에서 쓰기(INSERT/UPDATE)가 많고 읽기(SELECT)가 적을 때 유리한 인덱스는?
💡 전문검색에서 GiST는 GIN보다 업데이트(쓰기)가 빠릅니다. GIN은 역인덱스 구조라 삽입 시 많은 키를 관리해야 하므로 쓰기 오버헤드가 큽니다. 반대로 읽기(검색)는 GIN이 더 빠릅니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.