ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB - Index
    CS/DB 2021. 2. 14. 20:18

    DB - Index


    Index를 사용하는 이유

    • 일반적인 테이블에서 데이터의 레코드는 내부적으로 아무런 순서 없이 저장된다. 이때 저장되는 데이터 영역을 Heap영역 이라고 한다. Heap에서는 인덱스가 없는 테이블의 데이터를 찾을 때 무조건 전체 데이터 페이지의 처음 레코드부터 끝 페이지의 마지막 레코드까지 다 읽어서(Full scan) 검색 조건과 비교한다. 그러므로 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어 두는 것이다.

    • 즉 인덱스는 데이터를 select 할때 빨리 찾기 위해 사용된다. 

     

    Index란?

    • 테이블에 저장된 데이터를 빠르게 조회하기 위한 데이터 객체이다.
    • index를 걸면 index를 거는 컬럼을 기준으로 새로운 객체를 생성하여 별도의 디스크 공간에 저장한다.

     

    Index의 자료구조

    1. B+tree
      • 항상 좌, 우 자식 노드 개수의 밸런스를 유지하므로 최악의 경우에도 무조건 탐색 시간이 O(logn)이 된다.
      • 이진 트리를 확장해서 노드 하나에 여러 데이터가 저장될 수 있다.
      • 각 노드 내 데이터들은 항상 정렬된 상태이며 데이터와 데이터 사이의 범위를 이용해 자식 노드를 가진다.
      • leaf node끼리 linked list로 연결되어 있어 순차적인 범위 탐색에 유리하다.
    2. Hash
      • 탐색시간이 O(1)로 제일 빠르다. 충돌 시 최악의 경우에 O(n)이 될 수 있지만 평균적으로 O(1)이다.
      • 해시 함수를 통해 나온 해시 값을 이용하여 저장된 메모리 공간에 한 번에 접근한다.
      • 값이 정렬되어 저장된 것이 아니므로 특정 기준보다 크거나 작은 값을 찾아야 할 때 매우 비효율 적이다.

     

    Scan

    1. Table Full Scan
      • 테이블의 전체 블록을 읽어서 사용자가 원하는 데이터를 찾는 방식이다.
    2. Index Range Scan
      • 인덱스를 이용하여 필요한 범위의 리프 노드만 탐색하는 방식이다. 

     

    Index의 장단점

    • 장점: Full scan보다 빠르게 데이터에 접근할 수 있다.
    • 단점: insert, update, delete 시 속도가 저하된다. 정렬 상태를 유지해야 하고, 테이블 이외의 인덱스 테이블에도 insert, update를 해줘야 하기 때문에 insert, update가 빈번히 일어나는 테이블에 대해서 성능에 부정적 영향을 줄 수 있다. 

     

    reference

    github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#index

    wangin9.tistory.com/entry/B-tree-B-tree

    velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C

    wedul.site/403

    'CS > DB' 카테고리의 다른 글

    DB - RDBMS  (0) 2021.03.01
    DB - Transaction  (0) 2021.02.14
    DB - KEY  (0) 2021.02.12
    DB - 파티셔닝과 샤딩  (0) 2021.02.12
    DB - NOSQL  (0) 2021.02.12

    댓글

Designed by Tistory.