seegongsik
내 단어장
데이터

찾기를 빠르게, 인덱스

두꺼운 책에서 한 단어를 찾는다고 해봐요. 첫 장부터 끝까지 다 읽으면 너무 오래 걸려요. 그래서 책 뒤에는 찾아보기가 있죠. 단어와 페이지 번호가 적혀 있어서, 바로 그 페이지로 점프할 수 있어요. 데이터베이스도 똑같아요. 데이터가 많아지면 처음부터 다 훑기엔 너무 느려서, 인덱스라는 찾아보기를 미리 만들어 둬요.

01

책 뒤에는 찾아보기가 있어요

앞에서 데이터베이스가
원하는 줄을 어떻게 찾는지 봤어요.
그런데 데이터가 아주 많으면
처음부터 끝까지 다 훑는 건 느려요.
두꺼운 책에서 한 단어를
첫 장부터 찾는 것과 똑같죠.
그래서 책 뒤에는 찾아보기가 있어요.
단어 옆에 페이지 번호가 적혀 있어서
바로 그 페이지로 점프할 수 있어요.

두꺼운 책에서 한 단어 찾기
page 1
page 2
page 3
page 4
page 5찾는 단어
page 6
찾아보기: 단어 -> page 5
두 방식을 눌러 걸음 수를 비교해봐요

본문을 처음부터 훑기와 찾아보기로 점프하기를 눌러 비교해봐요. 몇 번 만에 찾나요?

찾아보기로 점프하니
훨씬 적은 횟수로 찾았죠.
데이터베이스의 인덱스도
바로 이 찾아보기예요.
데이터를 빨리 찾도록
미리 만들어 둔 지도인 셈이죠.
그런데 찾아보기에도 종류가 있어요.
정확한 값을 찾을 때와
범위를 찾을 때가 다르거든요.

02

정확한 값엔 해시 인덱스

'김철수'처럼
딱 하나의 정확한 값을 찾고 싶을 때가 있어요.
이럴 땐 해시 인덱스가 좋아요.
해시는 이름을 받아
곧장 자리 번호를 계산해 줘요.
그래서 줄줄이 훑을 필요 없이
그 자리로 한 번에 점프해요.
사물함 번호를 외워 두고
바로 그 칸을 여는 것과 같죠.

이름 (정확한 값)
자리 칸
0
1
2
3
4
이름을 눌러 해시로 자리를 찾아봐요

이름을 누르면 해시가 자리 번호를 계산해 그 칸으로 한 번에 점프해요.

이름 하나로 곧장
자리를 찾아냈죠.
해시 인덱스는 이렇게
정확한 값 찾기에 아주 빨라요.
하지만 약점이 있어요.
해시는 값을 흩어 놓기 때문에
'20살부터 30살까지'처럼
범위로 찾는 건 잘 못 해요.
그럴 땐 다른 인덱스가 필요해요.

03

범위엔 트리 인덱스

'20살부터 30살까지'처럼
범위로 찾고 싶을 때가 있어요.
이럴 땐 트리 인덱스가 좋아요.
트리 인덱스는 값을
작은 것부터 큰 것까지 정렬해 둬요.
그래서 시작 값을 찾으면
그 옆으로 죽 이어서
범위 안의 값을 차례차례 훑을 수 있어요.
사전이 가나다순인 것과 닮았죠.

정렬된 트리 인덱스 (나이)
범위의 시작 값을 눌러 정해봐요

찾을 범위를 눌러 정해봐요. 정렬된 트리 인덱스가 시작 값을 찾아 범위 안을 죽 훑어요.

정렬돼 있으니
범위가 옆으로 쭉 이어졌죠.
해시는 한 점을 콕 찾고,
트리는 한 줄로 죽 훑어요.
그래서 무엇을 자주 찾느냐에 따라
알맞은 인덱스가 달라요.
정확한 값이 많으면 해시,
범위가 많으면 트리.
그런데 인덱스는 공짜가 아니에요.

04

인덱스는 공짜가 아니에요

인덱스는 좋은 점만 있진 않아요.
첫째, 자리를 더 차지해요.
찾아보기를 따로 적어 두니까
그만큼 공간이 더 들어요.
둘째, 데이터가 바뀌면
인덱스도 같이 고쳐야 해요.
새 줄을 넣거나 지우면
찾아보기도 갱신해야 맞으니까요.
그래서 무턱대고 많이 만들면 손해예요.

데이터 표
Ann
Ben
Cho
인덱스 (찾아보기)
Ann#0
Ben#1
Cho#2
인덱스가 쓰는 자리: 3칸
줄을 넣거나 지우면 인덱스도 따라 바뀌어요

줄을 넣거나 지워봐요. 데이터가 바뀔 때마다 인덱스도 따라서 갱신되고, 쓰는 자리도 늘어나요.

데이터를 바꿀 때마다
인덱스도 따라 움직였죠.
자리도 점점 더 차지했고요.
그래서 인덱스는
자주 찾는 값에만 골라서 만들어요.
빨라지는 이득과
공간과 갱신이라는 비용을
저울에 달아 보는 거예요.
잘 고르면 찾기가 훨씬 빨라져요.

05

정리해볼까요

한 줄로 모으면 이래요.
인덱스는 책 뒤 찾아보기처럼
빨리 점프하게 해 주는 지도예요.
해시 인덱스는 정확한 값 하나를
한 번에 콕 찾아 주고,
트리 인덱스는 정렬돼 있어서
범위를 죽 훑기에 좋아요.
다만 자리를 더 쓰고
데이터가 바뀌면 갱신해야 하죠.

1. 책 뒤 찾아보기 = 빨리 점프하는 지도
2. 정확한 값엔 해시 인덱스
3. 범위엔 정렬된 트리 인덱스
4. 공짜가 아니에요 (자리 + 갱신)
단추를 눌러 핵심을 차례로 되짚어봐요

핵심을 차례로 눌러 되짚어봐요. (책 뒤 찾아보기 → 정확한 값엔 해시 → 범위엔 트리 → 공짜가 아니에요)

이제 인덱스가 어떻게
찾기를 빠르게 하는지 알게 됐어요.
데이터를 빨리 찾는 법을 봤으니
다음은 데이터를 안전하게
다루는 이야기로 가요.
여러 사람이 같은 데이터를
동시에 건드리면 어떻게 될까?
그 까다로운 문제를
다음 강에서 함께 풀어봐요.

한 줄 정리데이터가 많으면 처음부터 다 훑기는 느려요. 인덱스는 책 뒤 찾아보기처럼, 데이터베이스가 원하는 자리로 바로 점프하도록 미리 만든 지도예요. 종류가 두 가지 있어요. 해시 인덱스는 정확한 값 하나를 한 번에 콕 찾아 줘요. 트리 인덱스는 값이 정렬돼 있어서 범위를 훑어 찾기에 좋아요. 다만 공짜는 아니에요. 인덱스는 자리를 더 차지하고, 데이터가 바뀌면 인덱스도 같이 갱신해야 해요. 그래도 잘 쓰면 찾기가 훨씬 빨라져요.
데이터
이 페이지가 도움 됐다면 후원하기