Home Index
Post
Cancel

Index

Index란?

📌 정의

Index는 추가적인 쓰기 작업저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 이다.

궁극적으로 Insert / Update / Delete의 비용을 Trade off 하면서 가능한 적은 양의 Disk IO를 통해 원하는 데이터를 원활하게 가져올 수 있도록 설정하는 자료구조.

책을 예시로 들면, 책에서 원하는 내용을 찾는다면 책의 모든 페이지를 하나하나 다 둘러본다면 시간이 굉장히 오래걸린다. 하지만, 목차를 이용해 찾는다면 더 빨리진다. 데이터베이스의 Index는 책의 목차와 같다.

👍 장점

  • 조건 검색에서의 효율성

    Where절에서 특정 조건에 맞는 데이터를 찾아낼 때 레코드를 처음부터 끝까지 읽게되는데, 이를 풀 테이블 스캔(Full Table Scan)이라고 한다. 인덱스 테이블에서는 데이터가 정렬되어있으므로 Where절에 맞는 데이터를 빠르게 찾아낼 수 있다.

  • 정렬에서의 효율성

    Order By는 부하가 많이 걸리는 작업이다.

    인덱스는 이미 정렬되어있으므로 Order By절에서 실행되는 Sorting을 피할 수 있다.

  • MIN, MAX의 효율성

    MIN값과 MAX값을 인덱스 테이블의 레코드의 시작값과 끝 값을 한 건씩 가져오면 되기에 Full Table Scan을 할 필요가 없어진다.

👎 단점

  • 정렬된 상태를 계속 유지

    인덱스의 가장 큰 문제는 정렬된 상태를 계속 유지해야한다는 점이다. 따라서 레코드 내의 데이터가 바뀌는 작업(INSERT, UPDATE, DELETE)이 발생하면 인덱스 테이블과 원본 테이블 두 군데에서 데이터 수정을 해야한다는 단점이 있다.

⛓ 클러스터형

  • 테이블당 하나만 생성가능
  • 열 테이터를 인덱스로 지정한 행에 맞춰서 정렬한다
  • 리프 페이지에 포인터가 아닌 이 저장되어있다.
  • 각 페이지별로 주소를 가지고있지 않고, 해당 인덱스의 시작 값을 가지고 있다.
  • 물리적 페이지 위치가 정렬되어있다.

🔗 비 클러스터형

  • 테이블당 여러개 생성가능하다.
  • 리프 페이지에 포인터가 저장되어있다.
  • 물리적 페이지 위치가 정렬되어있지 않다.
  • 단일, 복합, 커버드 등의 인덱스 방식이 있다.

⚠ 주의점

인덱스를 걸어놓은 컬럼을 Where절을 사용해 검색할 때, 가공 또는 연산할 시 인덱스가 제대로 작동하지 않는다.

또, LIKE문에서 ‘%~~’로 검색할 시 인덱스가 작동하지 않는다. 부정연산자와 OR구문 또한 작동하지 않는다.

마지막으로, 일반적인 DBMS에서는 PK에 인덱스가 자동으로 적용된다.

This post is licensed under CC BY 4.0 by the author.