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