ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인덱싱이란
    데이터베이스 2021. 8. 12. 22:38

    1️⃣ 인덱스란 무엇인가

    💡
    인덱스란 데이터 베이스에서 원하는 데이터를 빨리 찾기 위해 튜플의 키 값에 대한 물리적 위치를 기록해둔 자료구조입니다.

    인덱스의 가장 큰 목적은 대용량 데이터 조회 시 select문의 조회 속도를 향상시키는 것입니다. 이를 위해서 Insert, Update, Delete문의 성능을 희생시키는 측면도 있습니다.

    대용량 데이터가 아니라면 인덱스의 메리트가 크지 않을 수 있습니다.

    인덱스의 장점

    Full Scanning에 비해서 테이블을 조회하는 속도를 크게 향상시킬 수 있습니다.

    인덱스의 단점

    인덱스를 유지하기 위한 별도 저장 공간이 필요합니다. (테이블의 10% 정도), 또한 카디널리티나 여러 요인들을 고려하여 인덱스를 생성하지 않으면 오히려 성능이 저하되는 현상이 발생할 수 있습니다.

    2️⃣ Clustered Index

    💡
    클러스터드 인덱스는 연속된 키 값의 레코드를 묶어서 같은 블록에 저장하는 방법으로 테이블당 하나만 생성할 수 있으며 인덱스의 리프 노드에서 페이지의 주소 값 대신 테이블의 열 자체가 저장되는 형태입니다.

    클러스터드 인덱스는 테이블당 하나만 생성할 수 있으며, 키 값에 의한 동등 및 범위 검색 모두에 유리합니다. 테이블의 데이터가 키 값에 따라 정렬된 형태로 저장되어 있어 특정 값을 쉽게 찾을 수 있으며 범위로 검색한다고 해도 이미 정렬되어 있으므로 손쉽게 검색할 수 있습니다. 또한 인덱스 페이지가 단순해져 넌클러스터드 인덱스에 비해 차지하는 공간도 작습니다. 클러스터드 인덱스는 테이블 생성 시 기본키를 생성하면 자동으로 생성됩니다.

    3️⃣ Non-Clustered Index

    💡
    넌클러스터드 인덱스는 인덱스의 리프노드에 실제 데이터 값이 아닌 테이블상의 데이터 위치를 지정하는 포인터를 저장합니다.

    넌클러스터드 인덱스는 테이블 당 여러개를 만들 수 있습니다. (복합키도 가능) 테이블 자체가 정렬되지는 않고, 인덱스 페이지만 정렬됩니다.

    인덱스의 리프노드가 데이터가 아니라 데이터가 위치하는 포인터이기 때문에 클러스터드 인덱스보다 검색 속도는 느리지만 데이터의 입력, 수정, 삭제는 더 빠릅니다.

    인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 페이지를 따로 만들기 때문에 클러스터드 인덱스보다 저장공간이 더 필요합니다.

    4️⃣ Clustered Index와 Non-Clustered Index 함께 사용

    클러스터드 인덱스와 넌클러스터드 인덱스를 같이 사용하는 경우, 넌클러스터드 인덱스로 찾고자 하는 데이터의 PK를 검색한 뒤, 클러스터드 인덱스로 데이터 값을 찾는 형태입니다. 이렇게 하는 이유는 클러스터드 인덱스에 저장된 데이터의 순서를 가능한 유지하면서 데이터의 삽입과 삭제에 대한 인덱스 관리 비용을 줄이기 위해서입니다.

    5️⃣ 인덱스 생성시 고려할 것

    인덱스는 데이터 검색을 빨리하기 위해 사용합니다. 하지만 인덱스를 생성했다고 데이터 검색이 무조건 빨라지는 것은 아닙니다.

    • 인덱스는 where 절에 자주 사용되는 속성이어야 합니다.
    • 인덱스는 조인에 자주 사용되는 속성이어야 합니다.
    • 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있습니다. (인덱스 유지 비용)
    • 속성이 가공되는 경우 사용하지 않습니다. (속성 그대로를 where절에 사용해야 한다)
    • 속성의 카디널리티가 낮을 때 유리합니다

    💡
    카디널리티란? 카디널리티란 '1 / 선택지의 개수'를 말하는 것으로, 예를 들어 100개의 행을 가진 테이블에 값이 (남, 여) 두 가지라면 카디널리티가 높다고 합니다.

    Reference

    https://mangkyu.tistory.com/96
    https://mozi.tistory.com/320
    MYSQL로 배우는 데이터베이스 개론과 실습, 한빛 아카데미

    '데이터베이스' 카테고리의 다른 글

    트랜잭션 - 회복  (0) 2021.08.11
    트랜잭션 - 고립 수준  (0) 2021.08.11
    트랜잭션 - 동시성 제어  (0) 2021.08.10
    트랜잭션 - 개념  (0) 2021.08.10

    댓글

Designed by Tistory.