토픽 215 / 224·비교표
인덱스 및 쿼리 최적화
B-Tree vs Hash vs Bitmap 인덱스
| 항목 | B-Tree | Hash | Bitmap |
|---|---|---|---|
| 검색 유형 | 동등+범위 | 동등만(O(1)) | 다중 조건 |
| 카디널리티 | 고카디널리티 | 고카디널리티 | 저카디널리티 |
| 적합 | OLTP(범용) | 키-값 조회 | OLAP/DW |
| DML 효율 | 보통 | 보통 | 비효율 |
B+Tree vs B-Tree
| 항목 | B+Tree | B-Tree |
|---|---|---|
| 데이터 저장 | 리프 노드에만 | 모든 노드 |
| 리프 연결 | Linked List 연결 | 미연결 |
| 범위 검색 | 리프 순차 스캔(효율) | 트리 재탐색 필요 |
| Fan-out | 더 많은 키 저장 가능 | 데이터 포함으로 적음 |
B-Tree vs Full-Text 인덱스
| 항목 | B-Tree 인덱스 | Full-Text 인덱스 |
|---|---|---|
| 검색 유형 | 정확 매칭, 범위, 접두어 | 자연어, 구문, 유사도 |
| 구조 | 트리 구조 | 역색인(Inverted Index) |
| LIKE '%검색%' | Full Scan(비효율) | 인덱스 활용(고효율) |
| 적용 | 정형 데이터 | 비정형 텍스트 |
클러스터드 vs 논클러스터드 인덱스
| 항목 | 클러스터드 | 논클러스터드 |
|---|---|---|
| 물리 정렬 | 인덱스 키 순서 정렬 | 데이터 원래 순서 |
| 개수 | 테이블당 1개 | 여러 개 가능 |
| 범위 검색 | 매우 효율(Sequential I/O) | Random I/O |
| 접근 방식 | 데이터 직접 접근 | ROWID 참조 후 접근 |
정적 해싱 vs 확장성 해싱 vs 선형 해싱
| 항목 | 정적 해싱 | 확장성 해싱 | 선형 해싱 |
|---|---|---|---|
| 버킷 수 | 고정 | 동적(2배 확장) | 순차 분할 |
| 오버플로우 | 체인 발생 | 없음 | 허용 |
| 검색 성능 | 저하 가능 | O(1) 유지 | O(1) 유사 |
| 메모리 | 적음 | 디렉토리 오버헤드 | 절약 |
B-Tree vs R-Tree(다차원 색인)
| 항목 | B-Tree | R-Tree |
|---|---|---|
| 키 차원 | 1차원 | 다차원 |
| 검색 유형 | 범위/동등 검색 | 공간 질의(교차, 최근접) |
| 적용 | 범용 DBMS | 공간 DB(PostGIS, Oracle Spatial) |
RBO vs CBO 옵티마이저
| 항목 | RBO(규칙 기반) | CBO(비용 기반) |
|---|---|---|
| 결정 기준 | 고정 규칙/우선순위 | 통계 기반 비용 추정 |
| 통계 활용 | 미사용 | 활용 |
| 정확도 | 낮음(고정적) | 높음(동적) |
| 상태 | 레거시 | 현대 DBMS 표준 |
B-Tree vs Learned Index
| 항목 | B-Tree | Learned Index |
|---|---|---|
| 구조 | 트리 기반 노드 탐색 | ML 모델 기반 위치 예측 |
| 메모리 | 노드 포인터 오버헤드 | 모델 파라미터만(최대 70% 절감) |
| 갱신 | 실시간 반영 | 모델 재학습 필요 |
| 적합 | 읽기/쓰기 혼합 | 읽기 중심(OLAP, 분석) |
조인 알고리즘: NL Join vs Hash Join vs Sort Merge Join
| 항목 | Nested Loop Join | Hash Join | Sort Merge Join |
|---|---|---|---|
| 적합 조건 | 소량, 인덱스 존재 | 대용량 동등 조인 | 대용량 범위/비동등 |
| 시간복잡도 | O(N×logM) 인덱스 시 | O(N+M) | O(NlogN+MlogM) |
| 인덱스 의존 | 높음 | 낮음 | 낮음 |
| 메모리 | 적음 | 많음(해시 테이블) | 중간(정렬 버퍼) |
| 조인 조건 | 모든 조건 | 동등(=)만 | 모든 조건 |
Semi Join vs Anti Join vs Inner Join
| 항목 | Semi Join | Anti Join | Inner Join |
|---|---|---|---|
| 반환 | 외부 테이블 행만 | 미매칭 외부 행만 | 양쪽 컬럼 모두 |
| SQL | EXISTS, IN | NOT EXISTS, NOT IN | JOIN ON |
| 특징 | 매칭 즉시 중단 | 불일치 필터 | 전체 매칭 |
B-Tree 인덱스 vs Full-Text 인덱스
| 구분 | B-Tree 인덱스 | Full-Text 인덱스 |
|---|---|---|
| 검색 유형 | 정확 매칭, 범위, 접두어 | 자연어, 구문, 유사도 |
| 구조 | 트리 구조 | 역색인(Inverted Index) |
| LIKE '%검색%' | Full Scan (비효율) | 인덱스 활용 (고효율) |
| 적용 | 정형 데이터 | 비정형 텍스트 |
Nested Loop Join vs Hash Join vs Sort Merge Join
| 구분 | Nested Loop Join | Hash Join | Sort Merge Join |
|---|---|---|---|
| 적합 조건 | 소량 데이터, 인덱스 존재 | 대용량 동등 조인 | 대용량 범위/비동등 조인 |
| 시간복잡도 | O(N×M), 인덱스 시 O(N×logM) | O(N+M) (빌드+프로브) | O(NlogN + MlogM + N+M) |
| 인덱스 의존 | 높음 (내부 테이블 인덱스 필수) | 낮음 (인덱스 불필요) | 낮음 (정렬 인덱스 있으면 유리) |
| 메모리 사용 | 적음 | 많음 (해시 테이블) | 중간 (정렬 버퍼) |
| 조인 조건 | 모든 조건 가능 | 동등 조인(=)만 | 동등/범위/비동등 모두 가능 |
| 랜덤 I/O | 많음 | 적음 | 적음 (순차 I/O) |