[MySQL] 9. 인덱스

Bnow·2023년 11월 13일
  1. 인덱스의 개념
    데이터를 빠르게 찾을 수 있도록 해주는 도구
    1) 장점
    - 검색 속도가 빨라짐
    - 쿼리 부하가 줄어서, 성능이 향상됨
    2) 단점
    - 인덱스 추가하는 공간이 필요
    - 데이터 변경 작업이 일어나는 경우 성능이 나빠질 수 있음

  2. 인덱스의 종류
    1) 클러스터형 인덱스 : 테이블당 1개
    2) 보조 인덱스 : 테이블당 여러개 가능

  3. 자동으로 생성되는 인덱스
    Primary Key Ehsms Unique를 사용하면 자동으로 인덱스가 생성된다.

    SHOW INDEX FROM table	--index 확인
  4. B-Tree(Balanced Tree, 균형 트리)
    노드, 루트 노드, 리프 노드, 페이지

  5. 페이지 분할
    INSERT 시 페이지 분할 발생하여, 성능이 나빠짐

  6. 클러스터형 인덱스와 보조 인덱스의 구조
    1) 보조 인덱스 : 데이터 페이지를 건드리지 않고, 별도의 장소에 인덱스 페이지를 생성한다.
    페이지번호 + #오프셋이 기록되어 있어, 데이터 위치를 가리키게 된다. 검색 속도가 빠르고, 데이터 입력/수정/삭제가 느리다.

    2) 클러스터형 인덱스 : 데이터 페이지 전체가 다시 정렬된다. 리프 페이지가 곧 데이터이다. 검색 속도가 느리고, 데이터 입력/수정/삭제가 빠르다.

    • 클러스터형 인덱스로 검색 : 루트 페이지 -> 리프 페이지
    • 보조 인덱스로 검색 : 루트 페이지 -> 리프 페이지 -> 데이터 페이지
  7. 클러스터형 인덱스와 보조 인덱스가 혼합되어 있을 경우

    [예시]
    1) 보조 인덱스의 루트 페이지에서 '은지원' 보다 큰 값이므로 200번 페이지에 있다는 것을 확인
    2) '임재범'은 클러스터형 인덱스의 키 값 LJB임을 확인한 후, 무조건 클러스터 인덱스의 루트 페이지로 가서 찾음
    3) 'LJB'는 'KBS'보다 크고 'SSK'보다 작으므로 1001번 페이지에 있는 것을 확인
    4) 'LJB' 값을 찾고 그 주소인 '서울'을 찾아냄

  8. 인덱스 생성

    CREATE INDEX idx_usertbl_addr ON usertbl (addr);
  9. 인덱스의 성능 비교
    클러스터형 인덱스와 보조 인덱스가 없을 때의 성능 차이 확인하는 실습 진행

  10. 결론
    1) 인덱스는 열 단위에 생성된다.
    2) WHERE 절에서 사용하는 열에 인덱스를 만들어야 한다.
    3) WHERE 절에 사용되더라도 자주 사용해야 가치가 있다
    4) 데이터 중복도가 높은 열은 인덱스를 만들어도 별 효과가 없다.
    5) 외래 키를 지정한 열에는 자동으로 외래 키 인덱스가 생성된다.
    6) JOIN에 자주 사용되는 열에는 인덱스를 생성해주는 것이 좋다.
    7) INSERT/UPDATE/DELETE가 얼마나 자주 일어나는지를 고려해야한다.
    8) 클러스터형 인덱스는 테이블당 하나만 생성할 수 있다.
    9) 클러스터형 인덱스가 테이블에 아예 없는 것이 좋은 경우도 있다.
    10) 사용하지 않는 인덱스는 제거하자.

profile
행복한 코딩

0개의 댓글