# 질의 응답 상황
[면접관]
지원자님 Web 개발을 주로 사용하셨는데 DB에서 Index가 무엇인지 대해서 간략하게 설명해주세요. |
[막개발자]
Index는 DataBase 분야에 있어서 Table에 대한 동작의 속도를 높여주는 자료 구조를 의미 합니다. Index 는 Table 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있습니다. 고속의 검색 동작뿐만 아니라 Record 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공 합니다. 사용자는 DataBase에 저장된 자료를 더욱 빠르게 조회하기 위하여 Index를 생성하고 사용합니다. |
# 상세 설명
**DB에서 인덱스(index)**란 데이터베이스 테이블에서 검색 성능을 향상시키기 위해 사용하는 데이터 구조입니다. 인덱스는 책의 색인처럼 작동하며, 테이블의 특정 열(또는 열 조합)에 대한 빠른 검색을 가능하게 합니다. 대량의 데이터에서 특정 정보를 효율적으로 찾을 수 있도록 지원합니다.
인덱스의 기본 개념
- 색인의 역할
인덱스는 테이블 데이터를 정렬하여 검색 속도를 높이는 데 사용됩니다.
테이블에 직접 접근하지 않고, 인덱스를 통해 해당 데이터를 빠르게 찾을 수 있습니다. - 구조적 구성
데이터베이스 인덱스는 주로 B-트리 또는 해시 구조로 구성되어 있습니다.
이 구조는 데이터의 정렬 및 효율적인 검색을 지원합니다.
인덱스의 종류
- Primary Index (기본 인덱스)
기본 키(Primary Key)에 자동으로 생성되는 인덱스.
각 테이블에서 유일하며, null 값을 허용하지 않음. - Unique Index (고유 인덱스)
중복을 허용하지 않는 인덱스.
특정 열의 값이 유일해야 하는 경우 사용. - Clustered Index (클러스터형 인덱스)
테이블의 데이터가 물리적으로 인덱스 순서에 따라 정렬.
한 테이블에 하나만 생성 가능. - Non-Clustered Index (비클러스터형 인덱스)
테이블 데이터와는 별도로 저장되는 인덱스.
테이블 내 데이터를 직접 정렬하지 않음.
여러 개의 인덱스를 생성할 수 있음. - Composite Index (복합 인덱스)
두 개 이상의 열을 결합한 인덱스.
다중 열을 기준으로 검색 시 유용. - Full-Text Index (전체 텍스트 인덱스)
텍스트 데이터의 빠른 검색을 위해 사용.
예: 문서 내용에서 특정 단어를 검색.
인덱스의 장점
- 검색 속도 향상
테이블 전체를 탐색(Full Table Scan)하지 않고, 인덱스를 통해 필요한 데이터를 빠르게 찾음. - 정렬 작업 감소
데이터를 정렬된 상태로 저장하므로, 검색 시 추가적인 정렬이 불필요. - 고유성 보장
고유 인덱스를 사용하여 데이터의 중복을 방지.
인덱스의 단점
- 쓰기 작업 성능 저하
데이터 삽입, 수정, 삭제 시 인덱스도 업데이트되어야 하므로 속도가 느려질 수 있음. - 공간 추가 소모
인덱스를 저장하기 위해 추가적인 디스크 공간이 필요. - 과도한 인덱스 생성 문제
지나치게 많은 인덱스를 생성하면 관리가 복잡해지고, 성능 저하를 초래할 수 있음.
인덱스의 작동 원리 (B-트리 예시)
- 삽입 시 정렬
데이터가 삽입될 때 인덱스 구조에 따라 자동으로 정렬됩니다. - 검색 프로세스
B-트리 인덱스에서는 루트 노드에서 시작해 자식 노드를 탐색하여 데이터를 찾습니다.
데이터가 정렬된 상태이므로 이진 탐색(Binary Search)처럼 효율적입니다. - 참조 테이블
인덱스를 통해 찾은 데이터의 위치를 기반으로 테이블의 실제 데이터를 검색합니다.
사용 시 주의점
- 인덱스를 생성할 열은 자주 조회되거나 조건문에 사용되는 열이어야 합니다.
(예: WHERE, JOIN, ORDER BY, GROUP BY) - 데이터 수정이 잦은 테이블에는 불필요한 인덱스를 피해야 합니다.
- 인덱스는 잘못된 설계 시 성능 저하의 원인이 될 수 있으므로 신중한 설계가 필요합니다.
실제 예제
-- 테이블 생성
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(50),
salary INT
);
-- 인덱스 생성
CREATE INDEX idx_department ON employees(department);
-- 검색 시 인덱스 활용
SELECT * FROM employees WHERE department = 'Sales';
'[이직 면접] 질의 응답' 카테고리의 다른 글
[Spring Framework] Spring Framework 동작방식에 대해서 설명하세요. (0) | 2020.12.31 |
---|---|
[Web 개발 기본] Framework이란 무엇인지 설명하세요. (0) | 2020.12.29 |
[자료 구조] Stack과 Queue의 차이점과 구현 방법 (0) | 2020.12.29 |
[네트워크] OSI 7계층에 대해서 설명하세요. (0) | 2020.12.29 |
[Java] System.out.println()에 대해해 설명하세요 (0) | 2020.12.29 |