최신 글
8
제목 게시일
38
Web

[DB] 인덱스(Index)는 왜 쓸까? feat. 막장스러운 설명

profile
코우
2023-05-19 22:01
조회 수 : 104

관계형 데이터베이스에는 인덱스라는 개념이 있다.
인덱스를 설정하면 검색 성능이 빨라진다는데 대체 뭘까?

책이나 사전에 보면 인덱스 페이지가 있다. 
그게 무슨 용도인지 생각해보면 DB 인덱스도 이해가 갈 것이다.

엄청 두꺼운 영어 사전이 있고 거기서 life라는 단어를 찾아야 한다.
인덱스가 없으면 어떻게 될까?
물론 인간은 잔머리의 동물이라 중간중간 펴보다 보면 운좋으면 L로 시작하는 단어들이 있는 페이지를 찾을 수도 있을 것이다.

그러나 컴퓨터는 잔머리 따윈 없다. 그냥 첫페이지부터 나올때까지 페이지를 넘길 것이다.
만약 1억 페이지이고 찾고자하는 정보가 가장 마지막에 있다면 어떻게 될까? 
답도 없게 오래 걸릴것이다.
 
이런 사태를 방지하고자 나온게 인덱스이다.  
인덱스를 설정하면 해당 데이터들을 정렬한 복제본이 생성되고 조회시 여기서 찾게된다.
근데 그냥 정렬만해서 보관하는게 아니라 여러 자료구조를 사용하여(설정하기 나름) 보관하고 있다.

대표적으로 B+ tree나 해시테이블, RB tree가 있다.

어떻게 데이터를 찾는지 아주아주 쉽게 설명하자면
정렬된 상태의 1부터 100중 78을 찾는다 생각해보자.
그냥 1부터 순차적으로 이동하며 찾으면 78번의 탐색이 필요하다.
그러나 50보다 크냐? 그럼 75보다 크냐? 이런식으로 찾으면 10번도 안걸린다. (설명하고보니 BST....)

물론 위에 언급한 자료구조들은 예시처럼 단순하게 동작하지는 않지만 (각각 동작방식은 검색 요망)
예시처럼 훨씬 효율적으로 찾는다고 보면 된다.

물론 장점만 있느냐? 그럴리가...

인덱스를 사용할 때는 신중히 판단해야한다.
왜냐?

아까전에 "정렬해둔" "복제본"을 들고있다고 했다. 

첫째로 정렬해두었다고??
그럼 데이터에 삽입, 갱신, 삭제 같은 조작이 가진다면??
부지런한 인덱스는 열심히 재정렬을 한다. 

그럼 뭐다? "성능 저하"
또한 정렬해둔다는건 중복이 많은 데이터 셋들은 굳이 써도 효과가 없겟지?? 

두번째로 복제본을 생성한다고??
복제본도 저장공간을 차지한다. 남발하면 그만큼 손해다.

정리하자면
데이터가 방대하고 검색위주의 컬럼이면 인덱스는 날개를 달아줄 것이다.
근데 데이터가 중복되는게 많거나 별로 없거나 또는 검색이 주요 동작이 아니다? 그럼 잘못하다간 독이 될 수 있다. 

결론은 생각하고 인덱스 쓰자.
안그럼 피본다. 

그럼 이만. 

 






 
share
twitter facebook kakao naver
댓글