데이터베이스 기초
100만 행이 있는 회원 표의 회원번호 열에 B+ 트리 인덱스를 만들었다. 일반적으로 기대할 수 있는 효과와 그 대가의 조합으로 올바른 것은?
- AWHERE 회원번호 = 12345 같은 검색이 빨라지는 한편, 행의 추가나 갱신 때마다 인덱스도 갱신하므로 쓰기는 느려진다
- B모든 열에서의 검색이 빨라지며, 대가는 없다
- C표의 행이 회원번호 순서로 정렬되므로 어떤 검색이든 빨라지는 한편, 저장 용량은 절반이 된다
정답과 해설 보기
정답: A. WHERE 회원번호 = 12345 같은 검색이 빨라지는 한편, 행의 추가나 갱신 때마다 인덱스도 갱신하므로 쓰기는 느려진다
인덱스(색인)는 표의 특정 열의 값으로부터 그 값을 가진 행의 위치를 재빨리 찾기 위한 자료 구조로, 관계형 데이터베이스에서는 B+ 트리가 자주 사용됩니다. 인덱스가 없으면 WHERE 회원번호 = 12345인 행을 찾는 데 100만 행을 차례로 조사(전체 스캔)해야 하지만, B+ 트리에서는 루트에서 리프까지 몇 단계만 따라가면 찾을 수 있습니다. 예를 들어 노드 하나에서 100개로 갈라진다면 100 × 100 × 100 = 100만이므로 약 3단계입니다. B+ 트리의 리프는 값의 순서로 연결되어 있으므로 BETWEEN 같은 범위 검색이나 ORDER BY 정렬에도 사용할 수 있습니다. 한편 행을 추가·갱신·삭제할 때마다 인덱스도 갱신해야 하므로 쓰기는 느려지고, 인덱스만큼의 저장 용량도 필요합니다. 인덱스를 만들지 않은 열에서의 검색은 빨라지지 않습니다.