SlideShare a Scribd company logo
Tree Indexes
2019-04-08 유동호
Table Index
Table Index는 효율적 엑세스를 위한 컬럼의 특정 Subset 의 정렬된 복제본

DBMS 는 항상 Table 의 테이블의 내용과 Index 와의 싱크가 맞음을 보장한다.

DBMS 는 각 쿼리의 실행에 있어 가장 최적의 Index 사용법을 찾는다.
B+Tree
B+Tree 는 자기 균형 트리(self-balancing tree) 자료구조이다.

스스로 데이터 정렬을 유지하고 검색, 순차적 탐색, 삽입, 삭제를 O(log n)의 속도로 지원한다.

• 노드가 두개 이상의 자식을 가질 수 있다는 점을 기반으로 한 이진검색 트리의 일반화이다.

• 큰 블록 단위의 데이터를 읽고 쓰는 시스템에 맞춰 최적화되었다.
B+Tree: Insert
말단 노드 L 을 찾고, 삽입하려는 데이터를 노드 L 의 정렬된 위치에 놓는다.

• 만약 L 의 공간이 충분치 않다면, L 을 L 과 새로운 노드 L2 로 분리한다.

◦ 항목을 고르게 분배하고, 중간 key 를 복사한다.

◦ L2 를 가리키는 인덱스 항목을 L 과 L 의 부모 노드에 삽입한다.

내부 노드를 분리하기 위해서, 항목을 고르게 분배하고, 중간 키를 부모 노드로 밀어올린다.
B+Tree: Insert
말단 노드 L 을 찾고, 삽입하려는 데이터를 노드 L 의 정렬된 위치에 놓는다.

• 만약 L 의 공간이 충분치 않다면, L 을 L 과 새로운 노드 L2 로 분리한다.

◦ 항목을 고르게 분배하고, 중간 key 를 복사한다.

◦ L2 를 가리키는 인덱스 항목을 L 과 L 의 부모 노드에 삽입한다.

내부 노드를 분리하기 위해서, 항목을 고르게 분배하고, 중간 키를 부모 노드로 밀어올린다.
B+Tree: Delete
root 에서 시작해서, 항목이 속해 있는 노드 L 을 찾은 뒤, 항목을 삭제한다.

• 만약 L 의 공간에 M/2-1 개 이하의 항목이 있다면

◦ 형제 노드(L 과 같은 부모를 가진 인접 노드)와의 재분배를 시도한다.

◦ 만약 재분배가 실패하면, L 노드를 형제 노드와 병합한다.

만약 병합이 발생하면, L 의 부모로부터 L 이나 형제 노드를 가리켰던 포인터 항목을 삭제한다.
B+Tree: Delete
root 에서 시작해서, 항목이 속해 있는 노드 L 을 찾은 뒤, 항목을 삭제한다.

• 만약 L 의 공간에 M/2-1 개 이하의 항목이 있다면

◦ 형제 노드(L 과 같은 부모를 가진 인접 노드)와의 재분배를 시도한다.

◦ 만약 재분배가 실패하면, L 노드를 형제 노드와 병합한다.

만약 병합이 발생하면, L 의 부모로부터 L 이나 형제 노드를 가리켰던 포인터 항목을 삭제한다.
Skip Lists
중간 노드를 스킵하기 위해 부가적인 포인터로 이루어진 여러 계층으로 구성된 링크드리스트이다.

전역적인 재조정 없이 정렬 된 순서로 키를 유지한다.

새로운 키를 삽입하려면, 해당 키에 얼마나 많은 계층의 링크드리스트를 붙일지 랜덤으로 결정한다.

대략적인 `O(log n)`의 속도를 제공한다.
Skip Lists
중간 노드를 스킵하기 위해 부가적인 포인터로 이루어진 여러 계층으로 구성된 링크드리스트이다.

전역적인 재조정 없이 정렬 된 순서로 키를 유지한다.

새로운 키를 삽입하려면, 해당 키에 얼마나 많은 계층의 링크드리스트를 붙일지 랜덤으로 결정한다.

대략적인 `O(log n)`의 속도를 제공한다.
Skip Lists: Insert
Skip Lists: Insert
Skip Lists: Delete
Skip Lists: Delete
Partial Index
Covering Indexes
Functional/Expression Indexes

More Related Content

More from Dongho Yu

2019 lightning talk_3
2019 lightning talk_32019 lightning talk_3
2019 lightning talk_3Dongho Yu
 
2019 lightning talk_2
2019 lightning talk_22019 lightning talk_2
2019 lightning talk_2Dongho Yu
 
2019 lightning talk_1
2019 lightning talk_12019 lightning talk_1
2019 lightning talk_1Dongho Yu
 
Control unit
Control unitControl unit
Control unitDongho Yu
 
Instruction cycle
Instruction cycleInstruction cycle
Instruction cycleDongho Yu
 
Computer system
Computer systemComputer system
Computer systemDongho Yu
 
Breadth first search
Breadth first searchBreadth first search
Breadth first searchDongho Yu
 
Intro to algorithms
Intro to algorithmsIntro to algorithms
Intro to algorithmsDongho Yu
 

More from Dongho Yu (11)

2019 lightning talk_3
2019 lightning talk_32019 lightning talk_3
2019 lightning talk_3
 
2019 lightning talk_2
2019 lightning talk_22019 lightning talk_2
2019 lightning talk_2
 
2019 lightning talk_1
2019 lightning talk_12019 lightning talk_1
2019 lightning talk_1
 
Cache
CacheCache
Cache
 
Main memory
Main memoryMain memory
Main memory
 
Control unit
Control unitControl unit
Control unit
 
Instruction cycle
Instruction cycleInstruction cycle
Instruction cycle
 
Cpu basic
Cpu basicCpu basic
Cpu basic
 
Computer system
Computer systemComputer system
Computer system
 
Breadth first search
Breadth first searchBreadth first search
Breadth first search
 
Intro to algorithms
Intro to algorithmsIntro to algorithms
Intro to algorithms
 

2019 lightning talk_8

  • 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)`의 속도를 제공한다.