[DB] Trigger, Index에 대하여

백엔드류·2024년 3월 13일

DB

목록 보기
2/4

Trigger

  • 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE와 같은 DML 이 실행되었을 때, DB에서 자동으로 동작하도록 작성된 프로그램
  • 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 큰 장점

Index

  • Index란 table을 처음부터 끝까지 검색하는 방법인 FTS와는 달리 인덱스를 검색하여 해당 자료의 테이블을 액세스 하는 방법 & 추가적인 쓰기 작업과 저장 공간을 활용하여 DB Table의 검색속도를 향상시키기 위한 자료구조
  • EX) DB를 책으로 비유하면 DATA는 책의 내용, DATA가 저장된 RECORD의 주소는 INDEX 목록에 있는 페이지 번호
  • 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠름, 하지만 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도 느려짐
  • 즉, 인덱스는 데이터의 저장 성능을 희생하고 그대신 데이터의 검색 속도를 높이는 기능

❓ DBMS의 Index 관리 기법

  • 해시 테이블
    • 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현 , (Key,Value)로 데이터를 저장하는 자료구조 중 하나로 빠른 데이터 검색이 필요할 때 유용
    • 시간복잡도는 O(1)이지만 해시테이블이 사용되는 경우는 제한적이다. 등호연산에만 특화되었기 때문에 부등호 연산이 자주 사용되는 DB 검색을 위해서는 적합X
    • 위와 같은 이유로 DB의 인덱스에서는 B+Tree가 일반적으로 사용됨

  • B+Tree
    • DB의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조.

    • 리프노드(데이터노드)만 인덱스와 함께 데이터(Value)를 가지고 있고, 나머지 노드(인덱스노드)들은 데이터를 위한 인덱스(Key)만을 갖는다

    • 리프노드들은 LinkedList로 연결되어 있다.

    • 데이터 노드 크기는 인덱스 노드의 크기와 달라도 상관없음

    • 데이터베이스의 인덱스 컬럼은 부등호를 이용한 순차 검색 연산이 자주 발생될 수 있다. 이러한 이유로 BTree의 리프노드들을 LinkedList로 연결하여 순차검색을 용이하게 하는 등 BTree를 인덱스에 맞게 최적화함

    • 비록 B+Tree는 O(log2n)의 시간복잡도를 갖지만 해시테이블보다 인덱싱에 더욱 적합한 자료구조가 되었다.




참고자료 : https://mangkyu.tistory.com/96

profile
공부한 내용을 정리한 블로그입니다 & 백엔드 개발자

0개의 댓글