처음 행부터 끝까지 순차 읽기
1페이지부터 마지막 페이지까지 넘기듯이 조건을 하나씩 확인합니다.
같은 검색 요청
책에서 "트랜잭션" 찾기
질문은 같아도, 먼저 어디를 읽느냐에 따라 검색 비용이 크게 달라집니다.
데이터 규모
행 1,000만 건
책으로 치면 거의 전 페이지
책으로 치면 거의 전 페이지
비교 포인트
테이블 전체를 훑는가
아니면 위치부터 좁히는가
아니면 위치부터 좁히는가
비교 기준
Full Table Scan
Index Scan
어디서 시작?
인덱스에서 값 위치 확인 정렬 탐색
색인에서 "트랜잭션 ... p.245"를 찾듯 정렬된 인덱스를 먼저 봅니다.
무엇을 읽나?
원하는 값이 뒤쪽에 있으면 거의 전체 테이블을 읽게 됩니다.
인덱스의 값과 ROWID로 필요한 위치만 찾아갑니다.
왜 차이가 나나?
정렬된 길잡이가 없어서 범위를 줄이지 못한 채 계속 비교합니다.
값이 정렬돼 있어 탐색 범위를 빠르게 줄인 뒤 해당 행으로 바로 점프합니다.
1,000만 건이면?
체감 속도는 수십 초까지 늘어날 수 있습니다.
같은 검색도 수 밀리초 수준으로 끝날 수 있습니다.
핵심 이해
인덱스의 본질은 값을 정렬해 두고 그 값이 있는 행 위치를 함께 기억하는 것입니다.
그래서 검색할 때 테이블 전체를 뒤지지 않고, 필요한 범위와 행으로 바로 좁혀 들어갈 수 있습니다.