• [Real Mysql 8.0] 인덱스 개요
    아키텍처 공부/MySql 2022. 3. 28. 21:46
    반응형

     

    1. 인덱스란?

     인덱스는 데이터베이스 쿼리의 성능을 언급하면서 빼놓을 수 없는 부분이다. 
    많은 사람이 인덱스를 언급할 때 책의 맨 끝에 있는 찾아보기(색인)로 설명한다. 
    DBMS도 책의 찾아보기(색인)와 마찬가지로 "ㄱ", "ㄴ", "ㄷ"..등과 같은 순서로 테이블 참고 정보로 생성 및 정렬돼 있다.

     인덱스는 자료구조의 SortedList와도 일맥상통 한다. 

    SortedList는 데이터가 저장될 때마다 항상 값을 정렬해야 한다. 그러므로 저장하는 과정이 복잡하고 느리다. 하지만 이미 정렬돼어 아주 빨리 원하는 값을 찾아올 수 있다.

     이와 마찬가지로 인덱스는 데이터 저장(INSERT, UPDATE, DELETE) 성능을 희생하고, 그 대신 데이터의 읽기 속도를 높이는 기능이다. 그러므로 테이블의 인덱스를 더 추가할지 말지는 데이터의 저장 속도를 어디까지 희생할 수 있는지, 읽기 속도를 얼마나 더 추가할지 말지에 따라 결정해야 한다.

     

    SELECT 쿼리의 WHERE 조건절에 사용되는 컬럼이라고 전부 인덱스로 생성하면, 데이터 저장 성능이 떨어지고, 인덱스의 크기가 비대해져 오히려 역효과만 불러올 수 있다.

     

    2. 인덱스의 역할별 구분

    인덱스를 역할별로 구분해 본다면 프라이머리 키와 보조 키(세컨더리 인덱스)로 구분할 수 있다.

    • MySQL서버에서 인덱스와 키는 동의어로 사용된다.

    프라이머리 키 - 테이블에서 해당 레코드를 식별할 수 있는 기준값 (NULL 불가, 중복 금지) (PK 설정 시 생성)
    보조 키 - 프라이머리 키를 제외한 나머지 모든 인덱스는 세컨더리 인덱스로 분류 


    3. 저장 알고리즘 별 구분

    • B-Tree 인덱스
      • 칼럼의 값을 변형하지 않고 원래의 값을 이용해 인덱싱하는 알고리즘이다.

     

    • Hash 인덱스
      • 칼럼의 값으로 해시값을 계산해서 인덱싱하는 알고리즘으로, 매우 빠른 검색을 지원한다. 주로 메모리 기반 데이터베이스에서 많이 사용한다.


    4. MySQL에서 사용하는 인덱스

    • B-Tree 인덱스
    • R-Tree 인덱스
    • 전문 검색 인덱스
    • 함수 기반 인덱스
    • 멀티 밸류 인덱스
    • 클러스터링 인덱스
    • 유니크 인덱스
    • 외래키
      • 보통 외래키는 라이브 데이터베이스에서 History테이블에 사용하는데, 웬만하면 사용하지 않는 추세라고 DBA에게 확인받았다. 그래서 외래키는 이미 대부분의 라이브 데이터베이스에서 제거되었다.

    5. MySQL의 InnoDB엔진의 인덱스

     클러스터링 인덱스는 무조건 하나 존재하며, 세컨더리 인덱스는 클러스터링 인덱스를 사용하여 레코드를 찾아간다.

    반응형

    댓글

Designed by Tistory.