ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Database] - Index
    CS/DB 2022. 10. 3. 23:09

    Index


    Table Address를 미리 저장하면 Mapping 하여 주는 개념
    • 논리적/물리적으로 테이블과 독립적
    • Table Scan(Full scan)을 하게 되면 O(N)이 들게 되는데 이를 더 효율적으로 탐색하기 위한 방법 O(LogN)
    • RDBMS에서 검색 속도를 높이기 위함
    • Index는 B-Tree(Balance Tree)
    • Join, Where에서 Index가 주로 사용되어 쿼리의 검색 속도를 빠르게 하는데 목적을 가진다.
    • Delete,Insert,Update 쿼리에는 Index 사용시 오히려 느리다.
      • Insert
        • Block에 여유가 없다면, 새로운 Block 할당 후 Key 옮기는 작업 수행
        • Index Split 작업 동안, 해당 Block Key 값에 대해 DML이 Blocking -> Wait
      • Delete
        • Index data 삭제 시에는 사용 X 표시
        • Table의 Data 수와 Index의 수가 다를 수 있다.
      • Update
        • Update시 Index Update 불가
        • Delete 후 Insert하는 작업으로 2배의 Resource가 든다.

     

    B-Tree


    스스로 균형을 찾는 Tree
    • Binary Search Tree와 유사하지만, Level을 자동으로 잡아준다.
    • Insert, Delete 시간을 희생하면서 Select의 시간을 높인다.
    • Root와 Branch는 하위 Block에 대한 Address값을 가지고 있습니다.
    • Leaf Node는 양방향 연결 리스트입니다.
    • Leaf Node에 저장된 Record(Message)들은 Key 순으로 Sort + Record들의 주소 값(ROWID)를 가지고 있다.
      • ROWID = Data Block Address + Row
      • Data Block Address = Data File number + Block number
      • Block number = Data file 내에서 부여한 상대 순번
      • Row = Block 내에서 순번
    • 인덱스 탐색
      • 수직적 탐색 = Index Scan 시작 지점 찾는 과정
      • 수평적 탐색 = Data를 찾는 과정

    결합 Index


    • 성별 - 이름 과 이름 - 성별로 하였을 때 Index의 구조에 대해서 알아보려고 합니다.
    • 성별 - 이름으로 구성한 방법과, 성별 - 이름으로 구성하여도 읽은 index block 갯수가 동일합니다.
    • where조건 절에 =으로 검색하는 경우는 index를 앞,뒤에 두든 Block I/O는 갯수가 동일-> 성능 동일

     

    Index 튜닝


    • 대량의 데이터에서 소량 데이터를 검색할 떄 사용
    • 성능을 좌우하는 역할은 Disk I/O

    1. Index scan 튜닝

    • Index Scan 과정에서 발생하는 비효율을 줄인다.
    • 학생 - 시력 과 같은 Data가 있는 경우를 예를 들겠습니다.
    • 시력 - 이름 순으로 되었다면 학생 - 시력 으로 검색하였을 때보다 많은 양의 데이터를 스캔해야 합니다.
    • Mssql에서는 내부 동작 시 이를 예측하여 더 빠른 방식으로 동작하게 도와준다고 합니다.

     

    2. Access 최소화 튜닝

    • 테이블에 Access하는 횟수를 줄이는 방식
    • Record에 Access 시 랜덤  I/O가 사용되어 Resource를 잡아먹는다.

     

     

     

    댓글

Designed by Tistory.