2026/06/04 3

Ch07. 인덱스 - 트리 자료 구조

인덱스가 어떤 방식으로 데이터를 빠르게 검색하는지 이해하려면 먼저 트리 자료 구조를 알아야 한다.트리는 부모 노드와 자식 노드로 구성된다.여기서는 각 원이 노드다. 노드 안에는 데이터와 다음 노드들의 위치가 보관된다.가장 높은 조상을 루트(root)라 한다. (이 그림을 뒤집어보면 왜 트리라고 하는지, 처음을 루트라고 하는지 이해가 될 것이다.)자식이 2개까지 올 수 있는 트리를 이진트리라 한다.여기에 노드의 왼쪽 자손은 더 작은 값을 가지고, 오른쪽 자손은 더 큰 값을 가지는 것을 이진 탐색 트리라 한다.이진 탐색 트리 - 입력 예시이진 탐색 트리의 핵심은 데이터를 입력하는 시점에 정렬해서 보관한다는 점이다. 그리고 작은 값은 왼쪽에 큰 값은 오른쪽에 저장한다. 데이터 (10, 5, 15, 1, 6, ..

Ch07. 인덱스 - 인덱스 소개

다시 책의 비유로 돌아가 보자. 우리는 책에서 특정 단어를 찾을 때 책을 처음부터 다 읽지 않는다. 책의 맨 뒤에 있는 "찾아보기(색인)" 페이지를 활용한다. "찾아보기" 페이지는 어떻게 구성되어 있는가?책의 중요한 키워드들이 알파벳순, 가나다순(정렬된 순서)으로 정리되어 있다.각 키워드 옆에는 그 키워드가 등장하는 페이지 번호가 적혀 있다.그런데 여기서 중요한 점이 있다. 우리는 찾아보기 페이지를 보고 어떻게 빨리 데이터를 찾을 수 있을까? 바로 중요한 키워드들이 가나다순(정렬된 순서)로 정리되어 있기 때문이다! 인덱스는 특정 컬럼(들)의 데이터를 기반으로 생성되는, 원본 테이블과는 별개의 특수한 자료 구조다.인덱스는 지정된 컬럼(예: item_name)의 값과, 해당 값을 가진 실제 데이터 행의 위치..

Ch07. 인덱스 - 인덱스가 필요한 이유

우리 쇼핑몰이 대성공을 거두어, 판매하는 상품 수가 25개가 아니라 50만 개, 100만 개로 늘어났다고 상상해 보자. 이제 고객이 우리 쇼핑몰에서 "게이밍 노트북"을 검색한다. 우리 시스템은 데이터베이스에 다음의 쿼리를 실행할 것이다.select * from items where item_name = '게이밍 노트북'; 데이터가 몇 건 없었을 때는 눈 깜짝할 사이에 끝나던 이 쿼리가, 이제는 3초, 5초, 혹은 그 이상이 걸리기 시작한다. 서비스 속도가 느려지고 고객들은 답답함을 느껴 떠나간다. 분명 쿼리는 똑같은데, 왜 이렇게 느려진 걸까? 데이터베이스 안에서 도대체 무슨 일이 벌어지고 있는 걸까? 느린 검색의 원인: 풀 테이블 스캔 (Full Table Scan)인덱스가 없는 테이블에서 특정 데이터..