# CHAPTER 4 데이터베이스 - INDEX

금성·2022년 12월 15일
0

CS 전공지식 노트

목록 보기
15/19

# SECTION 4.6 - INDEX

[ YOUTUBE 쉬운코드 - DB ]
DB 쿼리 속도를 높이는데 매우 중요한 것이 INDEX. 그래서 실무에서도 매우 자주 사용 된다.

  • Index를 쓰는 이유

    조건을 만족하는 튜플(들)을 빠르게 조회하기 위해

아래 쿼리문을 예시를 들어보자 (이후 설명할 내용들은 MySQL 기준 )

where절 이하,Join할때 조건들을 만족하는 데이터들을 빠르게 찾기위해 필요한 것이 Index !!!

  • INDEX를 걸어주는 문법
    primary key의 경우는 index가 자동으로 생성된다.

    • <INDEX 인덱스이름 (속성) > 로 index를 만들어줄 수 있음
    • UNIQUE한 값을 가져야 하는 index일 경우 UNIQUE를 앞에 붙여주면 됨
  • B트리 기반 인덱스 동작 방식

    • INDEX(a)를 만들어 보자

      • a의 대한 값들이 작은값부터 큰값으로 순서대로 저장이 됨
      • pointer는 실제 MEMBERS 테이블이 가지고 있는 튜플을 가르킴 (연결 고리)
    • whera a = 9 인 튜플을 찾아보자

      INDEX(a)의 가운데를 찾아 크기를 비교후 작은경우 아래 쪽 a를 스캔하는것을 제외시키는 과정을 반복함

      최종적으로 MEMBERS 튜플에 있는 값을 조회할수 있게됨

    • where a= 7 and b= 95 는 어떨까

      • 마찬가지로 INDEX(a)의 가운데에서 크기를 비교하면서 7을찾을때 까지 제외시켜나감
      • 부분적으로는 만족하나 b값을 확인하기 위해 실제 튜플까지 찾아가서 b값과 비교해야함
      • 나머지도 비교해봤더니 위쪽 값도 7로 같음
        -> 마찬가지로 튜플까지 b값과 비교해야함

      a에 관해서만 index가 있기 때문에 a=7 안에서는 실제 테이블로 넘어가서 fullscan을 하게 됨

      어떻게하면 좋을지 생각해보자.

    • a,b를 하나로 묶어주는 index(a,b)를 만들어 보자

      • INDEX(a,b)에는 a뿐만아니라 b정보도 가지고 있음
      • a가 우선순위가 높고 a값의 크기를 먼저 오름차순으로 나열하고 나중에 b 값을 오름차순으로 나열

      • 마찬가지로 a=7값을 만족하는 부분을 찾을때 까지 크기비교를 함
      • INDEX(a)와는 다르게 b에 관한 정보도 INDEX(a,b)에 있으므로 b=95를 만족할때 까지 크기비교를 함

      조건에 맞게 INDEX를 만들어 사용해야 좋은것!

    • 만약 b=95를 찾으려고 한다면 ?

      b에 관한 정보만으로는 정렬되어 있지 않기 때문에 제대로된 성능이 나오지 않음 => 이럴경우는 b에관한 index를 따로 만들어야함

그러면 index는 많이 만들수록 좋은것 아닌가?..

  • INDEX를 막 만들면 안되는 이유

    index를 만들면 이런 별도의 데이터들이 존재하게 됨
    -> 두가지 염두해야할 포인트가 생김

    • table에 write 할 때마다 index 변경 발생

      여기서 write는 insert, update, delete를 말함

      TABLE에 데이터를 추가하거나 업데이트 혹 삭제할 경우 각각에 index에도 데이터를 최신화 시켜야함

    • 추가적인 저장 공간 차지

      • team_id를 조건으로 하는 조건문이 있을 경우 위 index에서 해결이 가능
        -> 굳이 team_id만을 위한 index(team_id)를 만들필요가 없다는 의미 ( 저장 공간의 낭비, 성능향상 X )
profile
내일부터 공부 해야지

0개의 댓글

Powered by GraphCDN, the GraphQL CDN