Backend

인덱스(3) : 인덱스 종류

연_우리 2024. 7. 17. 23:07
반응형

목차

     

    이전 게시물

    https://lotuus.tistory.com/167

     

    인덱스(2) : 인덱스가 데이터를 검색하는 방법

    목차 이전 게시물 https://lotuus.tistory.com/166 인덱스(1) : 사용하는 이유, 정의, 데이터목차  인덱스 왜 사용해야하나요?문제상황데이터 10억개가 저장되어 있습니다.아래 SQL문을 실행하면 데이터

    lotuus.tistory.com

     

     

     

     

    다양한 관점으로 인덱스를 분류할 수 있습니다.

     

     

     

    물리적으로 정렬하나요?

    Clustered Index

    • 테이블의 레코드를 지정된 컬럼으로 물리적으로 재배열하는 인덱스입니다.
    • 테이블당 하나의 클러스터드 인덱스만 가질 수 있습니다.
    • 일반적으로 primary key가 설정된 컬럼은 자동으로 Clustered Index로 설정됩니다.
    • ⇒ Primary Key를 어떤 컬럼으로 지정하는지에 따라 데이터베이스의 성능이 좌우될 수 있습니다.
    • 장점
      • 인덱스가 곧 데이터이기 때문에, 인덱스 저장공간이 필요 없습니다.
      • 인덱스가 곧 데이터이기 때문에, Pointer(레코드위치값)을 확인하지 않고 바로 데이터에 접근할 수 있습니다.
      • 날짜나 시간처럼 순차적으로 접근되거나 범위 검색이 많이 발생하는 경우에 유용합니다.
    • 단점
      • 인덱스를 다른 컬럼으로 다시 생성하면, 데이터가 물리적으로 다시 정렬됩니다.

     

    Non-Clustered Index

    • 테이블의 레코드는 그대로 두고 지정된 컬럼에 대해 정렬된 인덱스를 만듭니다.
    • 테이블에 여러 개의 논클러스터드 인덱스를 생성할 수 있습니다.
    • 일반적으로 primary key 이외의 모든 인덱스는 논클러스터드 인덱스로 간주됩니다.
    • 장점
      • 다양한 인덱스를 생성하여 여러가지 쿼리를 최적화 할 수 있습니다.
    • 단점
      • 인덱스를 탐색한 후 실제 데이터 레코드를 참조해야합니다.
      • 인덱스 데이터를 저장하는데에 저장공간이 필요합니다.

     

     

    컬럼을 여러개 지정하나요?

    단일 인덱스

    • 계속 알아봤던 내용이기 때문에 생략하겠습니다.

    복합 인덱스

    • 여러 컬럼을 인덱스로 구성합니다.
    • 컬럼이 지정된 순서대로 인덱스가 생성됩니다.
      • 데이터베이스는 컬럼이 지정된 순서대로 데이터를 필터링 합니다.
      • 지정된 순서 반대로 검색하면, 만들어진 인덱스를 활용하지 못할 수도 있습니다!!

    EX. 테이블 employees, 복합인덱스 (last_name, first_name) 설정

    • SELECT * FROM employees WHERE last_name = 'Smith' // 인덱스 활용 가능
    • SELECT * FROM employees WHERE first_name = 'John' // 인덱스 활용 불가!!!!
    • SELECT * FROM employees WHERE last_name = 'Smith' AND first_name = 'John' // 인덱스 활용 가능

     

     

    실제 레코드까지 접근 하나요?

    커버링 인덱스

    • 쿼리로 가져올 데이터가 인덱스의 key값과 동일해서, 실제 레코드를 읽지 않아도 될 경우에 사용됩니다.

    EX. 테이블 users, 단일인덱스(age), 단일인덱스(name) 설정

    SELECT name, age FROM users WHERE age > 30;
    

    논 커버링 인덱스

    • 위의 반대의 경우입니다.
    • 실제 레코드를 읽어야 할 경우에 사용됩니다.

     

     

     

    다음 게시물

    https://lotuus.tistory.com/169

     

    인덱스(4) : 생성, 삭제, 사용, 테스트하기 + 실행계획 보는법

    목차  이전 게시물https://lotuus.tistory.com/168 인덱스(3) : 인덱스 종류목차 이전 게시물https://lotuus.tistory.com/167 인덱스(2) : 인덱스가 데이터를 검색하는 방법목차 이전 게시물 https://lotuus.tistory.co

    lotuus.tistory.com

     

    반응형
    • 네이버 블러그 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 구글 플러스 공유하기
    • 카카오톡 공유하기