카테고리 없음

DB) 복합인덱스

STUFIT 2024. 9. 2. 20:17
반응형

1. 인덱스란 무엇인가?

인덱스란 DB의 테이블의 특정 컬럼에 대해 데이터를 정렬하고 그 위치를 기록한 자료구조이다. 인덱스 덕분에 특정 값을 찾을 때 DB가 모든 데이터를 처음부터 하나씩 찾을 필요 없이, 정렬된 인덱스를 이용해서 빠르게 원하는 값을 찾을 수 있다.

예를들어, 학생들의 정보가 기록된 students 테이블이 있다고 가정해보자.

ID Name Age Grade
1 Alice 12 6
2 Bob 11 5
3 Charlie 12 6
... ... ... ...
100 David 11 5

학생이 100명이 있다고 가정할 때, 만약 'David' 라는 학생을 찾고 싶다면 DB는 select 문을 할 시, 1번부터 100번까지 순차적으로 학생 이름을 하나씩 확인해야 한다. 이럴 때에는 매우 많은 시간이 소요될 수 있다.

이 때, 인덱스를 사용하는데, Name 컬럼에다가 인덱스를 생성한다고 가정하면, select시에 David의 'D'로 시작하는 이름을 빠르게 찾아간다.

2. 복합 인덱스란?

그러면 복합 인덱스는 무엇일까? 복합 인덱스는 위처럼 Name컬럼에 한개만 거는게 아니라, Age, Grade등 다른 컬럼에도 복합적으로 인덱스를 거는 것을 말한다.

만약, Age와 Grade를 기준으로 학생들을 검색하고 싶다면 아래와 같이 해볼 수 있다.

나이가 12이고 grade가 6인 학생을 찾는다고 가정한다면

Age Grade ID
11 5 2
11 5 100
12 6 1
12 6 3
... ... ...

이렇게 빠르게 찾아질 것이다.

3. 검색 순서

복합 인덱스를 사용할 때 검색은 인덱스를 생성한 순서에 따라 이루어진다. 위에서는 Age가 첫번째 인덱스 컬럼이고, Grade가 두번째 인덱스 컬럼이 된다. 이 순서에 따라 검색이 이루어지기 때문에 첫번째 컬럼을 꼭 검색조건에 넣어야만 인덱스가 제대로 작동하게 된다.

ex)

- select * from students where Age=12 and Grade = 6 

위의 쿼리는 복합인덱스를 완벽하게 활용하여 빠르게 결과를 찾아냅니다.

- select * from students where Age=12

위의 쿼리는 Age가 첫번째 컬럼이기 때문에 인덱스를 사용할 수 있습니다.

- select * from students where Grade = 6 

위의 쿼리는 인덱스를 제대로 활용하지 못합니다.

반응형