데이터베이스 내의 각 오브젝트에 액세스 하는 방법과 순서는 쿼리 옵티마이저가 결정한다.
옵티마이저에 따라서 가장 효율적으로 데이터에 액세스 하기 위한 수단을 결정하고, 그 결정에 기초한 순서대로 데이터를 취득한다.
쿼리 옵티마이저의 동작 자체도 매우 흥미롭지만, 여기서는 우선 쿼리 옵티마이저가 데이터에 액세스 하는 수단을 결정한 후에
어떤 알고리즘으로 실제의 데이터를 취득하는지 소개한다.
인덱스가 사용되는 경우 각 인덱스 페이지는 동일 계층의 앞 페이지와 다음 페이지의 포인터를 각각 갖고 있다.
또한 인덱스의 각 계층도 링크 리스트로 링크되어 있다.
목적하는 데이터를 취득하기 위해 인덱스를 스캔해야 하는 경우 매우 심플한 알고리즘으로 데이터를 취득할 수 있다.
인덱스 페이지 계층의 상위에서 하위로 링크 리스트를 사용해서 스캔 시작 페이지를 특정한다.
다음으로 앞 페이지 또는 뒤 페이지의 포인터를 사용해서 스캔 시작 페이지부터 스캔 종료지점까지 이동하면서
데이터를 취득하면 된다.
인덱스가 사용되지 않는 경우 힙 테이블의 각 데이터 페이지는 앞 페이지 및 뒤 페이지의 포인터를 갖고 있지 않다.
때문에 개별 데이터 페이지만으로 상호의 관련성을 전혀 파악할 수 없다.
그러면 그런 상황에서 테이블 내의 전체 건을 스캔할 필요가 있는 경우 어떤 순서를 생각할 수 있을까?
힙 테이블을 구성하고 있는 각 데이터 페이지에는 정보가 없기 때문에
관리 정보를 저장하고 있는 페이지를 의지하는 수 밖에 방법이 없다. 이 경우는 IAM 이 효과를 발휘한다.
힙 구조에서 데이터를 검색하는 방법
IAM 페이지에는 히프 페이지가 어느 오브젝트에 소속되어 있는지 확인할 수 있다.
ex) 페이지 ID: 336
'DB ARCHITECTURE' 카테고리의 다른 글
sql server 데이터베이스 구조의 원리(1) - 데이터 파일 (0) | 2022.05.25 |
---|---|
sql server 메모리 관리(5) - 메모리의 용도 (0) | 2022.03.28 |
sql server 메모리 관리(4) - 프로세스 내부 메모리 관리 방법 (0) | 2022.03.27 |
sql server 메모리 관리(3) - NUMA(Non-Uniform Memory Architecture) (0) | 2022.03.26 |
sql server 메모리 관리(2) - 가상 어드레스 공간의 관리 (2) | 2022.03.25 |