728x90

1. 풀스캔
인덱스를 거치지 않고 테이블 데이터 스캔 방식이나 인덱스의 전체 구조를 처음부터 끝까지 순차적으로 읽는 방식을 의미한다.
데이터의 크기가 커질수록 이 방식은 속도가 점점더 느려진다. 때문에 서비스들은 풀스캔을 하지않기 위해 인덱스를 DB에 사용한다.
2.인덱스
2-1. 단일 인덱스
하나의 컬럼으로만 구성된 가장 기본적인 형태의 인덱스이다.
검색 조건이 단순하고 하나의 컬럼을 기준으로 데이터를 찾을 때 사용할수있다.
(여러 조건이 복합적으로 들어오는 복잡한 쿼리에서는 효율이 떨어진다.)
-- 인덱스 생성
CREATE INDEX idx_name ON Employees(name);
SELECT * FROM Employees WHERE name = '홍길동';
2-2. 복합 인덱스
두 개 이상의 컬럼을 묶어서 하나로 생성한 인덱스이다.
WHERE 절에 여러 개의 조건이 AND로 묶여서 자주 사용될 때 사용한다.
컬럼을 묶는 순서에 따라 인덱스가 지정된 순서대로 정렬된다.
-- 인덱스 생성 (부서별로 먼저 정렬하고, 그 안에서 나이순으로 정렬됨)
CREATE INDEX idx_dept_age ON Employees(department, age);
-- 인덱스를 정상적으로 타는 쿼리 (선행 컬럼 사용)
SELECT * FROM Employees WHERE department = '개발팀' AND age = 30;
SELECT * FROM Employees WHERE department = '개발팀';
-- 인덱스를 타지 못하는 쿼리 (선행 컬럼 누락)
SELECT * FROM Employees WHERE age = 30;
3. 커버링 인덱스
인덱스가 쿼리의 결과를 모두 커버하는 상태를 의미한다.
즉 SELECT 절에서 가져오려는 모든 컬럼이 이미 인덱스 안에 포함되어 있는 경우이다.
때문에 실제 테이블에 접근할 필요가 없어 매우 빠르다.
4. B-Tree 인덱스
흔히 일반적으로 인덱스라고 부르는것의 대부분은 B-Tree의 인덱스이다.(최신DBMS는 변형버전씀)
균형 트리형식을 가지며 자료구조 시간에 한번쯤 접하고 들어봤을것이다.
모든 노드에 데이터 저장이 이뤄지고 최상단부터 탐색해간다.

4-1. B+Tree 인덱스
B-Tree의 변형본이다. 최신 DBMS에서 인덱스로 많이 사용된다.
리프 노드에만 데이터를 저장하고, 중간 노드는 키만 보관한다.
(그래서 중간 노드가 가벼워 한 번에 많은 키를 로드할수 있다.)
Leaf 노드끼리 연결 리스트로 연결되어있어 불필요하게 위아래로 탐색을 할필요없이 옆으로 바로 탐색도 가능하다.
B-Tree에 비해 순차 검색 성능이 뛰어나기때문에 자주 사용된다.
일반적으로 다음과같은 구조를 가지며 탐색을 이어간다. (B-Tree, B+Tree 같은애들)
Root 노드 -> Branch 노드 -> Leaf 노드
5. 역인덱스 (Inverted Index)
키워드를 기준으로 해당 키워드가 포함된 문서나 데이터의 위치를 찾아내는데 사용된다.
Dictionary ,Postings List 과 같은 자료구조의 결합으로 이뤄져있다.
문서에서 고유한 단어들을 추출하고 정렬하여 저장하는 과정이라고 볼수있다.
캐릭터 필터 -> 토크나이저 -> 토큰 필터

5-1. 엘라스틱 서치(Elasticsearch)
분산형 RESTful 검색 및 분석 엔진이다.
역인덱스를 활용하며 현대적인 검색 시스템의 핵심으로 모든 데이터를 색인하여 전문 검색을 단 몇 초 만에 수행합니다.

5-2. 전문검색 인덱스(FULLTEXT INDEX)
역인덱스의 원리를 일반적인 RDBMS에 적용시키기 위한것이 전문검색 인덱스이다.
대부분의 RDBMS에서 기본적으로 제공해준다.
기존에는 와일드카드(%)가 검색어 앞에 붙어 있으면 B-Tree 인덱스를 탈 수 없다.데이터베이스는 1번 게시글부터 100만 번 게시글까지 본문을 전부 열어서 확인해야하는 비효율적인면이 존재했었다.
SELECT * FROM board WHERE content LIKE '%자료구조%';
텍스트 검색을 빠르게 하기 위해 해당 컬럼에 전문검색 인덱스를 생성하고, 전용 검색 함수를 사용하면 전체 문서를 읽을 필요가 없으므로 빠르게 검색이 가능하다.
CREATE TABLE board (
id INT PRIMARY KEY,
title VARCHAR(100),
content TEXT,
FULLTEXT INDEX idx_content (content) -- 역인덱스 생성
);
SELECT * FROM board
WHERE MATCH(content) AGAINST('자료구조');
5-3. FULLTEXT INDEX vs Elasticsearch
FULLTEXT INDEX가 기본 RDBMS에서 제공해주는만큼 사용하기는 편하지만 Elasticsearch가 한국어 처리 품질, 복잡한 랭킹알고리즘, DB서버와의 분리같은 특징들이 존재하기 때문에, 실무에서는 Elasticsearch를 주로 표준으로 사용하는 편이다.
728x90
'Computer Science > DataBase' 카테고리의 다른 글
| [DB] MYSQL 테이블 변경 주의점 ALTER TABLE (0) | 2026.07.11 |
|---|---|
| [DB] DB Connection이란 (0) | 2026.07.07 |
| [DataBase] Oracle Long 타입, 생소한 DB타입들 정리 (0) | 2026.07.02 |