본문 바로가기

DataBase/Mysql

[ mysql ] 예시로 보는 인덱스 (Index) 개념 완전 이해하기

반응형

인덱스(Index) 란?

 

배경

DB 작업을 하면서 가장 많으 접하게 되는 인덱스. 

하지만 생각보다 정확한 개념을 이해하고 있지 못한 사람들이 있다.

예시를 통해서 쉽게 인덱스를 되짚어보자.

 

개념

직관적으로 이해할 수 있도록 책에 비유해보겠다. 
예를 들어 학생 정보가 천만 건이 기록되어 있는 책이 있다고 가정해보자.
그 안에서 '이말년' 학생을 검색해야 한다면 어떤 방법으로 찾을 수 있을까?

첫 번째 행부터 마지막 행까지 하나씩 살펴보는 방법이 있다.
그러나 이러한 방식은 시간이 오래걸릴 것이다.

책의 두께가 두꺼워질수록 검색할 분량이 늘어날수록 검색 속도가 급격히 느려지므로 매우 비효율적이다.

 

반응형


그렇다면 책이 특정 기준으로 정렬이 되어있다면 어떨까? 흔히 우리가 알고있는 책의 목차처럼 말이다.
예를 들어 '이순신' 학생은 256페이지, '홍길동'은 542페이지, '이말년'은 724페이지에 있는 방식으로 말이다.
그러면 처음부터 끝까지 살펴볼 필요없이 바로 724페이지로 가면 '이말년' 학생을 찾을 수 있다.

 

이순신 --- page 256
홍길동 --- page 542
이말년 --- page 724
	:
	:


이러한 목차와 같은 역할을 하는 것이 바로 인덱스이다.

각 키워드가 어느 곳에 있는지 인덱스로 구성하면, 키워드 검색으로 원하는 페이지를 빠르게 찾을 수 있다. 

따라서 효율적으로 검색하기 위해서는 인덱스를 생성해주는 것이 좋다.

특히 저장된 데이터를 검색할 일이 많을 때는 인덱스를 설계하고 생성하는 과정이 매우 중요하다.

 

 

예시

아래는 총 6개의 학생 데이터를 가진 테이블이다. '이말년' 학생 정보를 찾는 쿼리를 실행해보자.

tb_user

 

SELECT * FROM tb_user WHERE user_name = '이말년'

 

# 결과

user_name 컬럼에 인덱스 없을 경우 rows 수 6

user_name 컬럼에 인덱스 있을 경우 rows 수 1

 

즉, 인덱스가 없을 경우에는 모든 데이터를 살펴보면서 찾는 것이고

인덱스가 있을 경우에는 찾으려는 특정 값을 바로 찾는 것이다.
데이터가 많으면 많을수록 인덱스의 유무의 따라서 성능 차이는 크게 날 것이다.

 

 

반응형