데이터베이스에서 b-tree란? (index의 정의)

문해피와 제육볶음·2023년 7월 26일
0

데이터베이스

목록 보기
6/13

🦦 왜 궁금하니

데이터 엔지니어가 되기위해서 한국 데이터 엔지니어 모임 이라는 오픈톡방에 있었는데
저와 같은 취준생이 어떻게 공부를해야 하냐는 질문에 실력자분이 갑자기

"MySQL에서 인덱스 탈때 위에서 아래로 가는게 빠른지, 아래에서 위로 인덱스를 타는게 빠른지 아시나요?"

라는 질문을 보고 정말 면접을 보는데 이런질문이 들어온다면
뭔가 기초적이고 기본적인 지식인것 같은데 라는생각이 들었습니다.

저는 데이터엔지니어는 파일처리와 디스크관리 메모리관리등 할당된 자원을 얼마나 효율적으로 관리하고 항상 최적화해야한다는 마음으로 접근을 해야한다는것을 알고있었습니다.

하지만 아무것도 준비되어있지 못한 저를 보았죠 ㅎㅎ

🧘🏽‍♂️ index?

우선 제가 처음 찾아보았을때 index라는 단어와 b-tree라는 파일처리용어가 나왔습니다.
그러면 제일 처음 위로가 빠른지 아래가 빠른지 알아야 하겠쪄?

💡 index 사전 풀이

인덱스를 사전에서 찾아보면 뜻이 무엇일까요??

  1. 색인
  2. 본문 중의 중요한 것을 뽑아 한 곳에 모아 이들의 본문 소재의 페이지를 기재한 것

💡 예시

그러면 쉽게 예를들어 보면
1부터100까지의 숫자가 있습니다. 그중에 제가 숫자 하나를 속으로 생각했는데 맞춰보라고 했을때
인덱스라는 개념이 없다면 처음부터
1인가요? 2인가요? 이렇게 하나씩 앞으로 가면서 제가 100을 생각했다면
100번물어본 후에야 답을 맞추게 됩니다.

하지만 효율을 아는 사람이라면 50이상인지 처럼 절반씩 잘라서 물어보면서 하겠죠

🧑‍💻 위에서 예시 처럼 데이터베이스에서 데이터를 찾을때 초심자이고 데이터가 얼마 없다면 속도의 차이가 많이 나지 않겠지만
만약 데이터가 1000만개 1억개 방대해 진다면.. 하나를 찾으려고 컴퓨터를 혹사를 시키겠져

그렇기 때문에 이러한 데이터를 모두 검색하는 참사를 방지하기위해 인덱스라는 개념을 적용을 하게 됩니다.

🗒️ 데이터베이스에서 보게되면

이제 인덱스를 데이터베이스 관점에서 바라보겠습니다.

만약 테이블이


이런식으로 있다면 성별이 남성인 유저들을 찾고싶은데 인덱스가 안걸려있다면
시간복잡도가 O(N)이 되면서 N개의 데이터를 모두 탐색할것입니다.

하지만 성별에 인덱스가 걸려있었다면 데이터를 모두 탐색하지않으며
걸려 있는 인덱스가 b-tree기반의 인덱스라면
시간복잡도가 O(log N)이 되면서 현저하게 속도가 줄게 됩니다.

즉, 인덱스가 안걸려있다면 full scan해야하지만, 걸려있다면 full scan보다 시간이 훨씬 단축되면서 성능 향상을 기대할수 있게 됩니다.

👌 결론은?

위의 결과와 사례들을 통해서 왜 인덱스를 사용하는지 알수 있습니다.
1. 조건에 만족하는 튜플들을 빠르게 조회하기 위해서
2. 빠른 order bygroup by를 하기위해서
3. 쿼리문에서 조건을 만족하는것을 빠르게 찾기 위해서 (JOIN, WHERE)

추후에는 인덱스의 의미를 알았으니 어떻게 적용을 하는지, 어떻게 적용해야 효율적인지를 알아보겠습니다.

0개의 댓글