핵심
해시 인덱스는 같은 값 찾기에는 빠르지만, 값의 순서가 필요한 질의는 도와주지 못합니다.
인덱스가 유지하는 것은 key -> bucket 매핑입니다. 그래서 = 조건은 바로 좁힐 수 있지만, 대소 비교나 정렬은 이어서 읽을 기준이 없습니다.
공유 규칙
먼저 키를 해시해 버킷을 찾고, 그 버킷에서 행 포인터를 꺼냅니다.
입력 키 key = 100
해시 함수 h(100) = 3
버킷 3 후보를 거의 바로 좁힘
행 포인터 반환 같은 키의 레코드를 빠르게 찾음
잘 맞는 질의
정확히 같은 값 검색은 바로 버킷으로 갑니다.
1
WHERE id = 100 찾을 키가 하나로 고정되면 해시 결과도 하나로 정해집니다.
2
해당 버킷만 확인 전체 인덱스를 훑지 않고, 계산된 버킷 안에서만 포인터를 찾습니다.
결과: equality lookup에서는 기대 시간 복잡도가 O(1)에 가깝습니다.
한계가 드러나는 질의
범위, 접두사, 정렬은 해시값만으로는 순서를 복원할 수 없습니다.
WHERE price > 100 대소 비교
버킷 번호로는 어느 값이 더 큰지 알 수 없음 해시값은 비교 순서를 보존하지 않아서, 이어진 범위를 스캔할 기준이 없습니다.
WHERE name LIKE 'A%' 접두사 검색
문자열의 원래 사전식 순서와 해시 순서가 다름 'A'로 시작하는 값들이 같은 구간에 모이지 않으므로 한 번에 읽을 수 없습니다.
ORDER BY price 정렬 결과 생성
인덱스 자체가 정렬된 순서를 제공하지 않음 버킷은 탐색용 분산 구조일 뿐, 값의 오름차순 목록이 아닙니다.
정리
해시 인덱스는 "같은 값을 빠르게 찾는 용도"에 특화됩니다. 반대로 range / prefix / sort처럼 순서를 써야 하는 작업은 다른 인덱스 구조가 더 적합합니다.