IT 이야기/DB

[DB 기술면접] 인덱스(index)란 무엇인가, 생성 방법과 원리

하늘봉 2022. 9. 4. 12:00
반응형

데이터베이스에서 인덱스란 테이블에서 데이터를 더 빨리 찾게 해주는 자료구조입니다.

그리고 일반적으로 인덱스의 자료구조는 B-Tree 를 뜻합니다. 

 

인덱스 생성 방법

인덱스 (B-Tree)가 테이블에서 데이터를 더 빨리 찾을 수 있는 이유

인덱스 생성의 장단점

 

인덱스 생성 방법 

우선 인덱스를 만들기 위해서 테이블을 생성하고 데이터를 입력합니다. (MS SQL 기준)

-- 테이블 생성
CREATE TABLE dbo.CUST_TABLE (  
        custid int 
,       custname varchar(10) 
,       country varchar(10) 
)  

DECLARE @i int = 1

-- 데이터 입력
WHILE (@i <= 9)
BEGIN
  INSERT INTO CUST_TABLE(custid, custname, country) 
  VALUES (@i, 'a'+convert(char(2), @i), 'korea');  
  
  SET @i = @i + 1
END

 

이제 인덱스를 만들어 줍니다.

-- 인덱스 생성
CREATE INDEX IDX__CUST_TABLE__CUST_ID ON dbo.CUST_TABLE(custid)

 

인덱스가 정상적으로 생성된 것을 확인할 수 있습니다. (sp_help 명령어로 확인)

 

인덱스 (B-Tree)가 테이블에서 데이터를 더 빨리 찾을 수 있는 이유

그렇다면 어째서 인덱스를 사용하면 테이블에서 데이터를 더 빨리 찾을 수 있을까요?

자세하게 설명하게 되면 글이 길어질 수 있기 때문에 쉽고 간단하게 개념적으로 설명해보도록 하겠습니다.

(복잡한 내용은 모두 생략)

 

인덱스를 설명할 때 흔히 우리는 책으로 비유합니다.

예를 들어 동물사전을 읽을 때, 호랑이에 대해서만 찾아보고 싶으면 어떡할까요? 

책에 맨 앞에 있는 목차(Index)를 보고 호랑이 대해서 작성된 페이지를 찾아 갑니다.

 

그런데 목차(Index)가 없으면 어떻게 찾을까요?

우리는 책의 첫 페이지부터 차례대로 호랑이가 나올때 까지 책을 한장 한장씩 뒤져 봐야합니다.

심지어 호랑이에 대해서 내용이 정렬되어 있지 않으면 뒤에 또 호랑이가 나올 수 도 있으니 결국에는 책의 모든 페이지를 다 확인해야 할 수 도있죠.  

 

이런 동작 원리를 B-tree와 함께 도식화 하여 보여드리겠습니다.

우선 앞서 저장한 테이블에 데이터가 아래와 같이 입력되어 있습니다.

 

custid 가 6인 값을 찾는다고 해봅시다.

 

 

인덱스가 없다면 6을 찾기 위해서 우리는 모든 데이터를 뒤져서 찾아야 합니다.

 

예를 들어 전체 데이터가 9건이니 인덱스를 사용하지 않으면 9의 비용이 듭니다.

(우리는 개념적으로 6 다음에 또 6 이 나오지 않는 다는 것을 알지만, DBMS는 알지 못하기 때문에 모든 데이터를 탐색)

 

 

그렇다면 인덱스를 만들면 어떻게 6을 찾을까요?

인덱스는 B-Tree 구조라고 말씀드렸습니다. 

 

 

인덱스를 사용할 경우 2의 비용밖에 들지 않습니다.

6을 찾기 위해서 데이터를 2번만 뒤져서 찾아냈고, 인덱스는 정렬되어 있기 때문에 다른 곳을 더 이상 찾을 필요가 없다는 것을 DBMS는 알고 있습니다.

 

이 것이 인덱스가 데이터를 더 빨리 찾아 낼 수 있는 기본적인 원리라고 생각하시면 좋겠습니다.

 

인덱스 장단점

장점

1. 테이블 검색 속도를 빠르게 해준다.

2. 쿼리의 부하를 감소시켜 시스템의 전체적인 성능이 향상된다.

 

단점

1. 인덱스를 생성한다는 것은 데이터베이스에 추가적인 저장 공간을 차지한다는 것을 의미한다.

2. B-Tree 구조를 유지하기 위해 데이터의 입력, 수정, 삭제 시 추가적인 부하가 발생할 수 있다.

 

인덱스는 확실히 테이블의 검색 속도를 빠르게하고 시스템의 성능을 향상시키는 역할을 할 수 있습니다. 하지만 인덱스를 무작정 만드는 것은 금물입니다. 

인덱스가 생성되는 만큼 데이터베이스의 저장 공간을 차지하고, 데이터 조작시에는 인덱스가 없을 때 보다 더 큰 부하가 발생할 수 있기 때문입니다.

 

반응형