챕터 8에서는 인덱싱에 관해서 배웠다
인덱싱은 원하는 데이터를 접근하는 속도를 높이기 위해 사용되는데
인덱스가 무엇인지 알기 위해서 서치 키가 무엇인지 알아야 한다(서치 키 - 파일에서 레코드를 찾기 위해 사용되는 속성 또는 집합)
인덱스 파일은 인덱스 엔트리라는 레코드로 구성된다
인덱싱에는 두 가지 종류가 있는데
1. Ordered index - 정렬된 순서로 서치 키를 저장하고 각 서치 키를 그 서치 키를 가지고 있는 레코드와 연결한다
ㅇ primary index(clustering index) - 순차적으로 정렬된 파일의 순서를 정하는 기준이 되는 속성을 서치 키로 사용하는 인덱스
ㅇ secondary index(non-clustering index) - 키의 순서가 레코드 순서와 상관없다
ㅇ dense index - 서치 키 값 과 그 서치 키 값을 가지고 있는 첫 번째 데이터 레코드에 대한 포인터를 포함
ㅇ sparse index - 일부 서치 키에 대한 인덱스 레코드만을 포함 -> clustering index인 경우만 사용 가능
2. Hash index - 서치 키들이 해시 함수를 사용해서 bucket 전체에 균일하게 분산
multi-level index : primary index가 메모리보다 크기가 더 크면 접근 비용이 많이 든다 그래서 디스크에 저장된 primary index를 순차파일로 취급하고 그 primary index에 대해서 sparse index를 만든다
두 번째 강의는 B+ tree에 대해서 배웠다
B+ tree는 인덱스 순차 파일의 문제점을 해결하기 위해 만들어진 인덱스이다
인덱스 순차 파일의 단점은 오버플로우 블록이 만들어지기 때문에 파일이 커질수록 데이터를 연속으로 스캔하는 성능이 감소하게 된다(오버플로우 블록 - 데이터 파일 경우 레코드 삽입, 삭제될 때 많은 양의 레코드를 이동해야 하므로 물리적인 순차 순서 유지어려워서 데이터가 들어갈 공간에 빈 공간이 없다면 레코드들을 오버플로우 블록에 넣어주고 들어갈 위치 바로 앞에 있는 레코드의 포인터를 새로 집어넣을 레코드에 연결하고 그 레코드의 포인터가 다음 레코드를 가리키도록 조정해준다)
B+ tree 단점은 추가적인 삭제에 대한 오버헤드나 공간적인 오버헤드가 든다는 것인데 B+ tree 단점보다 장점이 훨씬 뛰어나서 광범위하게 사용된다
B+ tree 전체 구조는 루트 노드, 내부 노드, 자식 노드로 구성되어 있고 Balanced tree(루트 노드에서 리프 노드까지 가는 경로가 동일)이다
이 B+ tree는 heap트리랑 성질이 비슷하다
내부 노드는 포인터로 이루어져 있어 B+ tree는 논리적으로 근접할 블록이 물리적으로 근접할 필요는 없다
한 계층에 저장할 수 있는 search key값의 개수가 많기 때문에 계층의 수가 작아질 수 있다
한 개의 레코드를 추가하거나 삭제하는 거라면 index 갱신에 걸리는 시간은 짧지만 몇 만개의 레코드를 갱신한다면 index 갱신에 걸리는 시간은 늘어날 것이다
그래서 반드시 index를 많이 가지고 있다고 해서 효과적으로 데이터베이스를 사용할 수 있는 것은 아니다
이렇게 챕터 8을 마쳤는데 B+ tree 부분은 간단하게 보면 이해되지만 자세하게 들어가면 어려우질 거 같으니 나중에 다시 한 번 더 봐야겠고 인덱싱에 대해서도 잘 배운 거 같았다 이제 다음 드디어 마지막 강의이다!!!
'CS > 데이터베이스' 카테고리의 다른 글
MySQL과 MySQL2의 차이점 (0) | 2021.07.03 |
---|---|
Ch9. Transaction (0) | 2020.02.02 |
Ch7. Normalization (0) | 2020.02.02 |
Ch6. Entity-Relationship Model (0) | 2020.01.29 |
Ch5. Advanced SQL (0) | 2020.01.23 |