ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql에서 조회 최적화를 위한 인덱스
    대용량 데이터 & 트래픽/대용량 처리를 위한 mysql 2024. 3. 5. 22:03

    인덱스란 정렬된 데이터를 가지는 새로운 테이블을 의미한다.

     

    일반적인 테이블은 PK 값으로 저장이 되기 때문에 특정 컬럼 (ex. 나이) 등으로 검색하는데 시간이 오래 걸리는데, 인덱스를 생성해놓으면 나이로 정렬된 새로운 테이블을 만들어 놓고 PK 값으로 매핑한다.

     

     

     

    인덱스의 자료구조

     

    Tree

    - 트리 높이에 따라 시간 복잡도가 결정

    - 트리의 높이를 최소화하기 위해 B+ Tree를 사용

     

    B+ Tree의 장점

    - 삽입 / 삭제 시 항상 균형을 이룸

    - 하나의 노드가 여러 개의 자식 노드를 가질 수 있음

    - 리프노드에만 데이터가 존재 (연속적인 데이터 접근 시 유리함)

     

     

    하지만 인덱스를 사용하는 것은 조회의 성능은 높일 수는 있지만 쓰기나 수정, 삭제의 성능은 낮출 수 있으므로 잘 고려해서 사용해야 한다.

     

     

    클러스터 인덱스 특징

    1. 클러스터 인덱스는 데이터 위치를 결정하는 키 값이다.

    -> 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다. 따라서 클러스터 키 삽입/갱신 시에 성능 이슈가 발생한다.

     

    2. MySQL의 PK는 클러스터 인덱스이다.

     

    3. MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다.

    -> PK의 사이즈가 인덱스의 사이즈를 결정한다.

     

     

    클러스터 인덱스의 장점

    1. PK를 활용한 검색이 빠름 (특히 범위 검색에서 빠름)

    2. 세컨더리 인덱스들이 PK를 가지고 있어서 커버링에 유리함

     

     

     

    사진 : 패스트캠퍼스 -  백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리

    사진으로 Cherry를 찾는 간단한 예를 들면 노드 1에서 Apple과 Durian 사이에 있으므로 노드 2로 이동한다. 이후에 노드 2에서 Carrot 다음에 있으므로 노드 5로 이동해서 Cherry를 찾는 방식이다.

Designed by Tistory.