지금까지 본 인덱스 예시에서는 중복되는 값이 없는 경우만 살펴봤는데요. 컬럼에 중복되는 값들이 있어도 인덱스는 충분히 잘 작동할 수 있습니다.
이번에도 책의 인덱스를 비유로 사용할게요. 책을 생각해보면 특정 개념들이 무조건 한 페이지에만 나오지는 않습니다. 예를 들면 "단풍잎"이라는 개념이 세 개, 네 개, 또는 열 개의 페이지에도 소개될 수 있는 거죠. 그럼 이때 책의 인덱스에서는 이 10개의 페이지를 모두 저장합니다. 그럼 저희는 이 열 페이지를 하나씩 돌면서 저희가 원하는 내용을 찾을 수 있는 거죠.
데이터베이스의 인덱스도 마찬가지입니다. 그림으로 표현하자면 이런 식으로 저장되는 거죠.
브랜드가 구짜, 나이코인 제품들, 오디도스인 제품들, 쇼넬 등 브랜드 이름이 이렇게 있고, 각 브랜드의 제품 로우에 대한 주소들이 이렇게 저장돼있습니다.

이때 특정 브랜드인 제품 로우들을 찾고 싶을 때는 이진 탐색을 통해서 브랜드를 찾고 가장 위에 있는 주소부터 시작해서 하나씩 아래로 가면서 해당 로우들에 접근하면 되는 거죠. 예를 들어 브랜드가 나이코인 제품들을 찾고 싶으면 주소가 1080인 제품부터 1030, 1040에 순차적으로 접근할 수 있습니다.
만약 브랜드가 나이코면서, 다른 조건도 만족하는 로우를 찾고 싶다면 이 주소들 중에서 원하는 로우를 찾을 수 있습니다. 이 로우 주소들은 어떤 특정 순서로 정렬된 것이 아니기 때문에 브랜드가 나이코인 제품들 중에서 또 다른 조건도 만족하는 데이터를 찾고 싶을 때는 네모 쳐진 제품들을 일일이 확인해보는 선형 탐색을 사용해야 합니다.
댓글