2. Table Index
Table Index는 효율적 엑세스를 위한 컬럼의 특정 Subset 의 정렬된 복제본
DBMS 는 항상 Table 의 테이블의 내용과 Index 와의 싱크가 맞음을 보장한다.
DBMS 는 각 쿼리의 실행에 있어 가장 최적의 Index 사용법을 찾는다.
3. B+Tree
B+Tree 는 자기 균형 트리(self-balancing tree) 자료구조이다.
스스로 데이터 정렬을 유지하고 검색, 순차적 탐색, 삽입, 삭제를 O(log n)의 속도로 지원한다.
• 노드가 두개 이상의 자식을 가질 수 있다는 점을 기반으로 한 이진검색 트리의 일반화이다.
• 큰 블록 단위의 데이터를 읽고 쓰는 시스템에 맞춰 최적화되었다.
4. B+Tree: Insert
말단 노드 L 을 찾고, 삽입하려는 데이터를 노드 L 의 정렬된 위치에 놓는다.
• 만약 L 의 공간이 충분치 않다면, L 을 L 과 새로운 노드 L2 로 분리한다.
◦ 항목을 고르게 분배하고, 중간 key 를 복사한다.
◦ L2 를 가리키는 인덱스 항목을 L 과 L 의 부모 노드에 삽입한다.
내부 노드를 분리하기 위해서, 항목을 고르게 분배하고, 중간 키를 부모 노드로 밀어올린다.
5. B+Tree: Insert
말단 노드 L 을 찾고, 삽입하려는 데이터를 노드 L 의 정렬된 위치에 놓는다.
• 만약 L 의 공간이 충분치 않다면, L 을 L 과 새로운 노드 L2 로 분리한다.
◦ 항목을 고르게 분배하고, 중간 key 를 복사한다.
◦ L2 를 가리키는 인덱스 항목을 L 과 L 의 부모 노드에 삽입한다.
내부 노드를 분리하기 위해서, 항목을 고르게 분배하고, 중간 키를 부모 노드로 밀어올린다.
6. B+Tree: Delete
root 에서 시작해서, 항목이 속해 있는 노드 L 을 찾은 뒤, 항목을 삭제한다.
• 만약 L 의 공간에 M/2-1 개 이하의 항목이 있다면
◦ 형제 노드(L 과 같은 부모를 가진 인접 노드)와의 재분배를 시도한다.
◦ 만약 재분배가 실패하면, L 노드를 형제 노드와 병합한다.
만약 병합이 발생하면, L 의 부모로부터 L 이나 형제 노드를 가리켰던 포인터 항목을 삭제한다.
7. B+Tree: Delete
root 에서 시작해서, 항목이 속해 있는 노드 L 을 찾은 뒤, 항목을 삭제한다.
• 만약 L 의 공간에 M/2-1 개 이하의 항목이 있다면
◦ 형제 노드(L 과 같은 부모를 가진 인접 노드)와의 재분배를 시도한다.
◦ 만약 재분배가 실패하면, L 노드를 형제 노드와 병합한다.
만약 병합이 발생하면, L 의 부모로부터 L 이나 형제 노드를 가리켰던 포인터 항목을 삭제한다.
8. Skip Lists
중간 노드를 스킵하기 위해 부가적인 포인터로 이루어진 여러 계층으로 구성된 링크드리스트이다.
전역적인 재조정 없이 정렬 된 순서로 키를 유지한다.
새로운 키를 삽입하려면, 해당 키에 얼마나 많은 계층의 링크드리스트를 붙일지 랜덤으로 결정한다.
대략적인 `O(log n)`의 속도를 제공한다.
9. Skip Lists
중간 노드를 스킵하기 위해 부가적인 포인터로 이루어진 여러 계층으로 구성된 링크드리스트이다.
전역적인 재조정 없이 정렬 된 순서로 키를 유지한다.
새로운 키를 삽입하려면, 해당 키에 얼마나 많은 계층의 링크드리스트를 붙일지 랜덤으로 결정한다.
대략적인 `O(log n)`의 속도를 제공한다.