2026/02/14 6

인덱스 분포도

인덱스 분포도(Index Distribution)는 데이터베이스 튜닝과 성능 최적화에서 가장 중요한 개념 중 하나로, 특정 컬럼의 데이터가 얼마나 고르게, 혹은 유니크하게 퍼져 있는지를 나타내는 지표입니다. 선택도(Selectivity)라는 용어와 혼용되어 사용되기도 합니다.1. 정의 및 핵심 개념인덱스 분포도는 '전체 레코드 중 특정 값을 가진 레코드가 차지하는 비율'을 의미합니다. 인덱스가 효율적으로 작동하기 위해서는 분포도가 좋아야(낮아야) 합니다.분포도가 좋다 (Good): 데이터의 중복이 적고, 특정 값을 조회했을 때 적은 수의 행(Row)만 반환되는 경우 (예: 주민등록번호, 사번)분포도가 나쁘다 (Bad): 데이터의 중복이 많고, 특정 값을 조회하면 많은 수의 행이 반환되는 경우 (예: 성별..

DB 2026.02.14

데이터베이스 주요 조인기법

1. 중첩 반복 조인 (Nested-Loop Join)프로그래밍의 이중 반복문(For-Loop)과 유사한 방식으로 동작하며, OLTP(온라인 트랜잭션 처리) 환경에서 주로 활용됩니다.처리 순서: 기준이 되는 선행 테이블(Driving Table)의 처리 범위를 먼저 액세스한 후, 추출된 값을 기준으로 참조 테이블(Driven Table)을 연결합니다.처리 범위 및 접근 방법: 선행 테이블의 추출 결과에 종속되어 후행 테이블의 처리량과 속도가 결정됩니다. 버퍼 크기만큼 부분적으로 결과를 반환하는 부분범위처리가 가능합니다.연결 수단 및 우선순위: 테이블 간 연결 조건의 인덱스 유무가 성능을 좌우합니다. 따라서 데이터량이 적고, 조건을 만족하는 행이 적은 테이블을 선행 테이블로 선택하는 것(우선순위 결정)이 ..

DB 2026.02.14

[인덱싱] 비트맵 조인 인덱스(Bitmap Join Index)

비트맵 조인 인덱스(Bitmap Join Index, BJI)는 두 개 이상의 테이블을 조인(Join)한 결과를 비트맵 형태로 미리 생성하여 저장해 두는 특수한 인덱스 기법입니다. 주로 데이터 웨어하우스(DW)와 같은 OLAP 환경의 스타 스키마(Star Schema) 구조에서, 무거운 조인 연산 성능을 극대화하기 위해 고안되었습니다.동작 원리 및 특징일반적인 비트맵 인덱스가 단일 테이블의 컬럼을 기준으로 만들어진다면, 비트맵 조인 인덱스는 물리적으로는 대용량 팩트 테이블(Fact Table)에 생성되지만, 논리적으로는 조인 대상인 디멘전 테이블(Dimension Table)의 컬럼 값을 기준으로 구성됩니다.사전 조인(Pre-Joined): 사용자가 쿼리를 실행할 때마다 매번 테이블을 조인하는 대신, 인..

DB 2026.02.14

[인덱싱] 클러스터 인덱스와 희소 인덱스

1. 클러스터 인덱스 (Clustered Index)클러스터 인덱스는 테이블의 실제 데이터가 물리적으로 정렬되는 방식을 결정하는 인덱스입니다. 사전에서 단어를 찾을 때 알파벳 순서대로 페이지가 정렬되어 있는 것과 같은 원리입니다.물리적 정렬: 인덱스의 키 값에 따라 테이블의 실제 데이터 행(Row)들이 정렬되어 저장됩니다.개수 제한: 데이터의 물리적인 순서는 하나만 존재할 수 있으므로, 테이블당 오직 한 개만 생성할 수 있습니다. (관계형 데이터베이스에서는 주로 기본키(Primary Key)에 자동 생성됩니다.)검색 속도: 인덱스의 리프 노드(Leaf Node)가 곧 실제 데이터 페이지이므로, 특정 범위의 데이터를 연속적으로 읽어오는 범위 검색(Range Query)에 매우 뛰어난 성능을 보입니다.데이터..

DB 2026.02.14

[SQL] 이중 상관서브쿼리

(릴레이션)학생(학생번호, 이름)과목(과목번호, 과목명)수강(학생번호, 과목번호)SELECT 학생번호, 이름FROM 학생WHERE ( 가 ) ( SELECT 과목번호 FROM 과목 WHERE ( 나 ) ( SELECT 수강.과목번호 FROM 수강 WHERE 수강.과목번호 = 과목.과목번호 AND 수강.학생번호 = 학생.학생번호 ) );번호가나①EXISTSEXISTS②NOT EXISTSEXISTS③EXISTSNOT EXISTS④NOT EXISTSNOT EXISTS 1. 쿼리 구조 분석가장 안쪽 서브쿼리: 특정 학생(학생.학생번호)이 특정 과목(과목.과목번호)을 수강하고 있는지(수강 테이블에 데이터가 있는지) 확인합니다.중간 서브쿼리 (나 조건): ..

DB 2026.02.14

[조인] 조인을 상관서브쿼리로 표현

조인(JOIN)과 동일한 논리적 결과(교집합 또는 특정 조건을 만족하는 연관 데이터 추출)를 얻기 위해 IN이나 EXISTS 외에 사용할 수 있는 SQL 구문들을 설명해 드리겠습니다. 이해를 돕기 위해 실무에서 자주 다루는 릴레이션을 예시로 사용하겠습니다.[예시 릴레이션 정의]PROJECT (프로젝트 릴레이션):pid (기본키): 프로젝트 IDpname: 프로젝트명status: 상태 (예: 'Active', 'Closed')TASK (작업 릴레이션):tid (기본키): 작업 IDpid (외래키): 프로젝트 ID (PROJECT 참조)assignee: 담당자 이름목표 질의: "현재 'Active'(진행 중) 상태인 프로젝트에 할당된 작업 담당자(assignee)의 이름을 중복 없이 조회하라." 비교를 위한..

DB 2026.02.14