ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS study] 2022.06.17
    CS 2022. 6. 17. 18:46

    DB index

    index

    • 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조
    • 특정 칼럼에 인덱스를 생성 해당 칼럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 저장됨
    • 이렇게 저장되면 앞으로의 쿼리문에 인덱스를 이용해 검색 속도의 향상을 가져올 수 있음
    • 실제 DB 관련 작업에서 속도 저하는 Select 문 특히 Where문에서 발생하는데 이런 문제의 대안으로 index를 사용
    • 가장 큰 특징으로는 데이터들이 정렬되어 있다 조건 검색이라는 영역에서 굉장한 장점

     

    조건 검색 Where 절의 효율성

    • 테이블을 만들고 데이터가 쌓이면 레코드는 내부적으로 순서가 없이 저장됨
    • 이렇게 되면 Where절에 특정 조건에 맞는 데이터를 찾아낼 때도 레코드의 처음부터 끝까지 다 읽어야 함
    • 하지만 인덱스 테이블은 데이터들이 정렬되어 저장되어 있기 때문에 조건에 맞는 데이터를 빠르게 찾아낼 수 있음

     

    정렬 Order by 절의 효율성

    • 인덱스를 사용하면 Order by에 의한 Sort 과정을 피할 수가 있음
    • Order by는 부하가 많이 걸리는 작업임
    • 정렬과 동시에 1차적으로 메모리에서 정렬 메모리보다 큰 작업 일시 디스크 I/O도 추가적으로 발생하기 때문
    • 인덱스를 사용하면 전반적인 자원의 소모를 하지 않아도 됨 이미 정렬이 되어있기 때문임

     

    MIN, MAX의 효율적인 처리

    • 이것 또한 데이터가 정렬되어 있기에 얻는 장점임
    • MIN, MAX를 레코드의 시작 값과 끝 값만 가져오면 됨

     

    인덱스의 단점

    • 가장 큰 문제는 정렬된 상태를 계속 유지시켜주어야 함
    • 그렇기에 레코드 내에 데이터 값이 바뀌는 부분이면 악영향을 미침
    • INSERT, UPDATE, DELETE를 통해 레코드의 값이 바뀌면 인덱스 테이블의 값들을 다시 정렬해야 함
    • 인덱스 테이블 원본 테이블 두 군데에 데이터 수정 작업을 해줘야 함
    • 인덱스를 관리하기 위해 DB에 10%에 해당하는 저장공간이 필요함

     

    인덱스의 관리

    • 데이터 값이 변경되면 계속 정렬을 해주어야 하기 때문에 부하가 발생함
    • 부하를 최소화하기 위해 데이터 삭제라는 개념에서 인덱스를 사용하지 않는다는 작업으로 관리함
    • INSERT: 새로운 데이터에 대한 인덱스를 추가함
    • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업 진행
    • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고 갱신된 데이터에 대해 인덱스를 추가

     

    인덱스 생성 전략

    • 조건절에 자주 등장하는 칼럼
    • 항상 '='으로 비교되는 칼럼
    • 중복되는 데이터가 최소한인 칼럼
    • ORDER BY 절에서 자주 사용되는 칼럼
    • 조인 조건으로 자주 사용되는 칼럼

     

    인덱스의 자료구조

     

    해시 테이블

    • Key, Value로 데이터를 저장하는 자료구조 빠른 데이터 검색이 필요할 때 유용함
    • 제한적으로 사용되는데 그 이유는 '=' 연산에만 특화되어 있기 때문
    • '<', '>' 연산이 자주 사용되는 데이터베이스 검색에는 해시 테이블이 적합하지 않음

     

    B+Tree

    • DB인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조
    • 모든 노드에 데이터를 저장했던 B-Tree와는 다른 특성을 가짐
    • 데이터 노드만 인덱스와 함께 데이터(value)를 가지고 있고 인덱스 노드들은 데이터를 위한 인덱스(key)만 가지고 있음
    • 무조건 데이터가 있는 데이터 노드까지 가야 하는 단점은 존재함
    • 데이터 노드들은 LinkedList로 연결되어 있음 데이터 순회가 쉬움
    • 데이터 노드의 크기는 인덱스 노드의 크기와 같지 않아도 됨
    • 인덱스 칼럼은 부등호를 이용한 순차 검색 연산에 자주 발생될 수 있음
    • 이러한 이유로 시간 복잡도가 O(1)인 해시 테이블에 비해 시간 복잡도는 O(logn)이지만 해시 테이블보다 인덱싱에 더 적합한 자료구조

     

     

     

     

    'CS' 카테고리의 다른 글

    카디널리티와 인덱싱  (0) 2022.11.03
    [CS study] 2022.06.29  (0) 2022.06.29
    [CS study] 2022.06.13  (0) 2022.06.13
    [CS study] 2022.06.08  (0) 2022.06.08
    [CS study] 2022.06.01  (0) 2022.06.01

    댓글

Designed by Tistory.