정렬된 값 + 행 위치
인덱스는 검색 키를 따로 정렬해 두고, 찾은 뒤에는
ROWID
로 실제 행에 도달합니다.
테이블은 전체 데이터를 저장하고, 인덱스는
검색에 필요한 값과 위치
만 더 가볍게 들고 있습니다.
실제 데이터 저장소
테이블 `users`
행에는 모든 컬럼이 들어갑니다. 저장 순서는
email 순서와 무관
할 수 있습니다.
ROWID
name
email
age
1
김철수
c@t.co
25
2
이영희
b@t.co
30
3
박민수
d@t.co
22
4
최지은
a@t.co
28
검색어와 일치하는 행을 바로 찾기 어렵기 때문에,
어디에 있는지 가리키는 정보
가 따로 있으면 유리합니다.
검색용 보조 구조
인덱스 `idx_users_email`
검색 대상인
email 값
과 해당 행의
ROWID
만 저장하고, email 기준으로 정렬합니다.
email
ROWID
a@t.co
4
b@t.co
2
c@t.co
1
d@t.co
3
정렬된 키 목록
이라서 이진 탐색이나 트리 탐색처럼 범위를 빠르게 줄이는 방식이 가능합니다.
검색 조건
email = 'b@t.co'
테이블 전체를 보지 않고, 먼저 인덱스에서 email 값을 찾습니다.
인덱스 결과
ROWID = 2
정렬된 인덱스에서 원하는 키를 찾으면 실제 행 위치가 바로 나옵니다.
실제 행 읽기
users의 2번 행
이제 필요한 행만 읽으면 되므로 불필요한 비교와 I/O를 줄일 수 있습니다.