정렬된 값 + 행 위치
인덱스는 검색 키를 따로 정렬해 두고, 찾은 뒤에는 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를 줄일 수 있습니다.