반응형

인덱스(Index)

데이터베이스에서 Index라는 개체는 테이블의 검색 능력을 향상시키는 데에 중요한 역할을 합니다. 인덱스는 어떻게 생성하는 거고 왜 사용해야 할까요?

 

검색 능력 향상

인덱스를 사용하지 않고 검색하면 조건에 맞는 데이터를 찾기 위해 테이블에 있는 데이터를 모두 조회합니다. MySQL에서 제공하는 샘플 데이터 employees에서 데이터를 조회하여 확인해봅시다.

 

explain select * from employees where first_name = 'Georgi';

 

샘플 데이터를 가지고 위 쿼리를 실행했습니다.

 

결과를 보면 네번째 컬럼 type에 ALL이 들어간 걸 볼 수 있습니다. 또 row 컬럼의 값이 299778인데 이는 해당 데이터를 조회하기 위해 순회한 열의 갯수입니다. 즉, 인덱스를 사용하지 않고 검색을 했을 때는 테이블에 있는 모든 데이터를 순회하기 때문에 속도가 느려집니다. 그러면 인덱스를 사용하면 어떻게 될까요?

 

인덱스 생성

create index idx_employees_first_name on employees(first_name);

 

위 쿼리는 테이블 'employees'의 컬럼 'first_name'에 인덱스를 생성하는 쿼리입니다. create index 뒤에 'idx_employees_first_name'에서 idx는 index를 의미하고 그 뒷부분은 테이블 이름과 컬럼 이름입니다. 이렇게 생성하고 앞에서 검색했던 내용을 다시 검색해보겠습니다.

 

아까는 type에 ALL이라고 적혀있었으나 ref(참조)로 바뀐 것을 볼 수 있고 rows도 253으로 줄어든 것을 볼 수 있습니다. 기존에 모든 데이터를 순회하여 찾는 방식과 다르게 인덱스를 이용하면 해당 데이터가 어디 있는지 알고 있기 때문에 검색 속도가 줄어들게 되고 데이터가 많을 때 검색 속도를 향상시킬 수 있는 데이터베이스 튜닝은 한 가지 방법입니다.

반응형

+ Recent posts